- 投稿日:2021-01-05T22:00:10+09:00
Laravelはじめました
Larave(ディレクトリ構成)
本日からLaravelを触り出したので自分の勉強記録として投稿していこうと思う。
簡単にディレクトリ構成から勉強。
(フレームワークを余り触ったことがないので混乱)ディレクトリ構成
1 2 app アプリのメインとなるところ bootstrap 初期処理やキャッシュ config アプリの設定 database データベース(マイグレーション) public 画像,JS,CSS resources blade(HTML的な) routes アプリのURL設定など storage セッションやログ tests テスト用 vendor Composerの依存内容 設定ファイル(隠しフォルダにあり)
- codeフォルダの歯車マーク押して、show hidden filesをクリック
- .envフォルダを開く
phpDB_CONNECTION=mysql DB_HOST=localhost // 編集 DB_PORT=3306 DB_DATABASE=laravel_todo // 編集 DB_USERNAME=root DB_PASSWORD=root // 編集 環境によって異なる 現在はAWSdbマイグレーションとは
SQLを直接使わなくても、データベースを管理できるLaravelの仕組み。
テーブル作成の流れ
1.マイグレーションファイルを生成
2.ファイルにテーブル定義を書く
3.マイグレーションを実行し、DBに反映※まず、1テーブル1ファイルと覚えよう
マイグレーションの生成
- ファイルの場所とファイル名のルール database/migrations
2020_12_20_00000_todos_table.php
生成時間 アクション名 テーブル名- ファイル生成コマンド
tarminalphp artisan make:migration todos_tableカラム名:add_カラム名to_userstable
tarminalphp artisan migrate全ファイルが実行される
マイグレーションの中身
upとdawnメソッドがある
upが実行(作成)で、downが元に戻す(削除)Schemaファザードを使っている
例)Schema::create テーブルを作成カラムの作成はBlueprintオブジェクトのtableメソッドを使う
例)$table->string('name')名前カラムを作成!実際にファイルを見てみる
```言語:php database/migrations/2020_12~
/**
ここでマイグレーションファイルを読み込む
*/
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;class CreateTodosTable extends Migration
{
/**
* Run the migrations.
*
* @return void
/
public function up()
{
/
Schemaファザードを使っている
if tableがなかったら作る
/
if(!Schema::hasTables('todos')){
Schema::create('todos', function (Blueprint $table) {
$table->id();
$table->string('todo');
$table->date('deadline');
$table->text('comment')->nullable();
/ 100文字制限の時は('comment',100) */
$table->timestamps();
});
}
}
}マイグレーションを実行する ```言語:tarminal php artisan migrate結果
tarminalMigration table created successfully. Migrating: 2014_10_12_000000_todos_table Migrated: 2014_10_12_000000_todos_table (31.23ms)error
言語:tarminal
$ composer dump-autoload
からの再起動とりあえずここまで。
次回に進む。
- 投稿日:2021-01-05T19:13:57+09:00
PHP 数値の3桁の区切りカンマを打つ
- 投稿日:2021-01-05T16:18:34+09:00
Laravelプロジェクトの構築メモ①
*使用するもの*
・Mac OS
・MAMP
・Visual Studio Code
・Laravel6
・phpMyAdminLaravelアプリケーションを立ち上げる手順
ターミナル操作
①MAMPのhtdocsに移動(ここでプロジェクトを作成するため)
Applications/MAMP/htdocs
②composerコマンドを使ってLaravelプロジェクトを作成する(今回は6系のものを使用する)(アプリ名はmyappとする)
composer create-project laravel/laravel myapp --prefer-dist "6.0.*"
③htdocsからmyappに移動する
cd myapp
④いくつか権限を変える
chmod -R 777 storage
chmod -R 777 bootstrap/cache
MAMPの設定
①MAMPを立ち上げる
②preferencesの中のServerへ移動し、Document rootを変更する
Document rootを先ほど作成したアプリの中のpublicフォルダを指定する
Applications/MAMP/htdocs/myapp/public
③MAMPのサーバーを起動する
④ブラウザでlocalhost:8888にアクセスすると、Laravelプロジェクトが表示される
Laravelフォルダの.envファイルの初期設定
①Visual Studio Codeで先ほど作成したmyapp(Laravelプロジェクト)というファイルを開く
②その中の.envファイルを編集する
・アプリ名を変更APP_NAME=Laravel・データベース設定
MAMPのトップページの下にMySQLの情報が記載されているから、
その通りにデーターベース設定を行うDB_CONNECTION=mysql DB_HOST=localhost ←変更 DB_PORT=8889 ←変更 DB_DATABASE=laravel ←あとで編集する DB_USERNAME=root DB_PASSWORD=root ←追加 DB_SOCKET=/Applications/MAMP/tmp/mysql/mysql.sock ←追加文字コードのエラーを防ぐ設定
MySQLのバージョンによって文字コードでエラーが発生する場合がある。
①Laravelフォルダにて、
app/Providers/AppServiceProvider.php
へ移動②use文を追加する
use Illuminate\Support\Facades\Schema;を追加し、
public function boot() { Schema::defaultStringLength(191); }細かい設定を行う
Laravelフォルダ内の
config/app.php
を開く'timezone' => 'Asia/Tokyo''locale' => 'ja'以上がLaravelアプリケーション作成前準備です。
- 投稿日:2021-01-05T15:19:51+09:00
WordPressで管理画面のサイドメニューからカテゴリー、タグを削除する
ワードプレスのテーマtwentynineteenを基盤に、管理画面のサイドバーメニューからカテゴリーやタグを削除する実装を行ったので、備忘録的にこの記事を残す。
環境情報
PHP:version 5.3.3
WordPress:version 5.1.8
WPテーマ:twentynineteen既存の投稿 と 既存のカテゴリー、タグ
functions.php//サイドバーメニューからカテゴリー、タグを削除(既存の投稿と既存のカテゴリー、タグ) function remove_menu() { remove_submenu_page('edit.php', 'edit-tags.php?taxonomy=category'); remove_submenu_page('edit.php', 'edit-tags.php?taxonomy=post_tag'); } add_action('admin_menu', 'remove_menu');カスタム投稿 と 既存のカテゴリー、タグ
functions.php//サイドバーメニューからカテゴリー、タグを削除(カスタム投稿と既存のカテゴリー、タグ) function remove_menu() { remove_submenu_page('edit.php?post_type=カスタム投稿のスラッグ', 'edit-tags.php?taxonomy=category&post_type=カスタム投稿のスラッグ'); remove_submenu_page('edit.php?post_type=カスタム投稿のスラッグ', 'edit-tags.php?taxonomy=post_tag&post_type=カスタム投稿のスラッグ'); } add_action('admin_menu', 'remove_menu');カスタム投稿 と カスタムタクソノミー
functions.php//サイドバーメニューからカテゴリー、タグを削除(カスタム投稿とカスタムタクソノミー) function remove_menu() { remove_submenu_page('edit.php?post_type=カスタム投稿のスラッグ', 'edit-tags.php?taxonomy=カスタムタクソノミーのスラッグ&post_type=カスタム投稿のスラッグ'); } add_action('admin_menu', 'remove_menu');
- 投稿日:2021-01-05T14:39:05+09:00
PHP: 通貨の表示
Ubuntu でライブラリーのインストール
sudo apt install intlcurrency_yen.php#! /usr/bin/php <?php // ------------------------------------------------------------------ // currency_yen.php // // Jan/05/2021 // ------------------------------------------------------------------ // fputs (STDERR,"*** 開始 ***\n"); # $data = [500,4500,34500,234500,1234500]; $fmt = numfmt_create('ja_JP', NumberFormatter::CURRENCY); # foreach ($data as $value) { print numfmt_format_currency($fmt, $value, 'JPY') . "\n"; } # fputs (STDERR,"*** 終了 ***\n"); // ------------------------------------------------------------------ ?>実行結果
$ ./currency_yen.php *** 開始 *** ¥500 ¥4,500 ¥34,500 ¥234,500 ¥1,234,500 *** 終了 ***次のバージョンで確認しました。
$ php --version PHP 7.4.9 (cli) (built: Oct 26 2020 15:17:14) ( NTS ) Copyright (c) The PHP Group Zend Engine v3.4.0, Copyright (c) Zend Technologies with Zend OPcache v7.4.9, Copyright (c), by Zend Technologies
- 投稿日:2021-01-05T12:57:42+09:00
【PHP】Laravelのデバッグ・変数の確認方法(var_export, dump, dd関数)
PHPのデバッグ方法がいくつかあるらしいので調べてみた。
PHPの場合
Laravelの場合
PHPの場合のデバッグ方法
1. var_export関数を使う
var_export
関数で変数の中身を確認することができる。よく使われる
var_dump
よりも有効性が高く、出力は有効なPHPコードになる。・
var_export ( $expression [, bool $return = false ] )
php > $obj = array("a" => 1, "b" => 2, "c" => 3); php > var_export($obj); array ( 'a' => 1, 'b' => 2, 'c' => 3, )出力結果が
array('a' => 1, 'b' => 2, 'c' => 3)
となっており、連想配列の定義そのものになっている。>var_dump, var_export, print_rの違いまとめ
2. error_log関数
エラーをログファイルに出力し、コンソールに表示する方法。
・
error_log($変数名);
ただし、使用にはコード冒頭でエラーログのオプションをONにし、ログの出力先ファイルを指定が必要。
冒頭への記述ini_set("log_errors", "on") ini_set("error_log", "ファイルパス&ファイル名")
また、変数が配列の場合は、以下のようにする必要がある。
error_log(print_r($変数名), true);
Laravelのデバッグ方法
Laravelの場合、dump関数やdd関数を使うと画面上に背景黒・文字色白で選択したデータを表示することができる。
dump関数とdd関数の違い
dump関数は通常の画面 + dump関数を記述した位置にその内容が表示される。つまり、そのページのコードをすべて読み込む。
一方で、dd関数はdd関数の内容のみの表示となる。
1. dump関数
.blade.php@php dump($tdth); @endphp▼ブラウザの表示例
変数の内容以外のリソースも表示される。
2. dd関数
dd関数とは「dump and die」の略。
意味は、変数の内容を表示(dump)するが、それ以降は実行されない(die)。
.blade.php@php dd($tdth); @endphp▼ブラウザの表示例
指定した変数の内容のみを表示する。
- 投稿日:2021-01-05T11:09:25+09:00
【PHP】mb_send_mailでうまく改行されないときに気をつけること
【PHP】mb_send_mailでうまく改行されないときに気をつけること
使用環境
- XAMPP 8.0 (PHP 8.0)
- windows 10
背景
websiteを制作していてお問い合わせページから送られてきたメールで改行コードがそのまま出力される、改行できていないという事態が発生。
原因
改行コード
\r\n
をシングルクォーテーションで囲んでいたため、文字として出力されていた。文字列を指定する最も簡単な方法は、引用符 (文字 ') で括ることです。
引用符をリテラルとして指定するには、バックスラッシュ () でエスケープする必要があります。 バックスラッシュをリテラルとして指定するには、二重 (\) にします。 それ以外の場面で登場するバックスラッシュは、すべてバックスラッシュそのものとして扱われます。 つまり、\r や \n といったおなじみのエスケープシーケンスを書いても特別な効果は得られず、 書いたままの形式で出力されます。
PHP公式マニュアル$message = 'お問い合わせを受け付けました。\r\n' . '名前:' . $_SESSION['name'] . '\r\n' . 'tel:' . $_SESSION['tel'] . '\r\n' . 'お問い合わせ内容:' . '\r\n' . $_SESSION['message']; mb_send_mail($_SESSION['email'], 'お問い合わせありがとうございます', $message);解決方法1:改行コードをダブルクオーテーションで囲む
ダブルクオーテーションで囲むことで二重引用符として扱われ、改行できる。
二重引用符
文字列が二重引用符 (") で括られた場合、 PHP は、以下のエスケープシーケンスを特殊な文字として解釈します。
PHP公式マニュアル$message = 'お問い合わせを受け付けました。'."\r\n" . '名前:' . $_SESSION['name'] . "\r\n" . 'tel:' . $_SESSION['tel'] . "\r\n" . 'お問い合わせ内容:' . "\r\n" . $_SESSION['message']; mb_send_mail($_SESSION['email'], 'お問い合わせありがとうございます', $message);解決方法2:実行環境のOSに対応する改行コードを出力する定数PHP_EOLを使用する
PHP_EOLは実行環境のOSに対応する改行コードを出力する定数になります。
例えば、Windows環境の改行コードは 「\r\n(CRLF)」 Linux/Unix系、MacOS等の改行コードは「\n(LF)」になります。
そのため、この定数を文字列と結合することでコンソールに改行された状態で出力することができます。
ただ注意しておきたいのが、ブラウザで見た際にはPHP_EOLでは改行されません。
理由としては、php/HTMLファイルを表示する際はHTMLと認識されるため、改行コードではく「
」で改行されます。
PHPでphp_eolを使う方法【初心者向け】$message = 'お問い合わせを受け付けました。' . PHP_EOL . '名前:' . $_SESSION['name'] . PHP_EOL . 'tel:' . $_SESSION['tel'] . PHP_EOL . 'お問い合わせ内容:' . PHP_EOL . $_SESSION['message']; mb_send_mail($_SESSION['email'], 'お問い合わせありがとうございます', $message);
- 投稿日:2021-01-05T07:52:20+09:00
ポートフォリオのアプリを公開したらイタズラされまくった話
はじめに
私は過去にLaravel等の技術を使用して「朝活SNS」アプリを個人開発し、
AWSのEC2上で、一般公開していました。(転職活動時)アプリの紹介記事をQiitaにも投稿したところ、
→AWS, Docker, CircleCI, Laravelでポートフォリオを作成してみた【参考リンク付き】
有難いことに300LGTMもいただくことができ、多くの方に
実際にポートフォリオアプリを触ってもらえたものの、結構いろんなイタズラもされしまっておりました。^^;実装の詰めが甘かったところもあり、その脆弱性を突かれたイタズラ等もあったので、
アプリはデプロイして終わりなのではなく、運用フェーズに入ってからも気を抜いてはいけないのだと実感しましたね。。こちらの記事では、そんなイタズラの数々や、それに対策できた部分について簡単にご紹介できればと思います。
1.下ネタ投稿をされまくる
これは予想はしていました・・笑
投稿機能のあるアプリなら、ありがちなイタズラかもしれませんね。
ちなみに次のような下ネタ投稿をされていました↓ザ・下ネタの帝王!ばりの単語が連呼されていますが、1日平均3回くらいは書き込まれていたので、毎日ちょいちょいパトロールを実施。。
書き込みを見つけては、トイレ掃除をするような心境でDBから投稿を削除していました。(´・_・`)笑LaravelでNGワード機能を実装してみようと試みたものの、不具合があったため現在この辺は検討中です。
2.クロスサイトスクリプティングを狙われる(XSS)
Webアプリ等の脆弱性を狙って、悪意のあるスクリプトを実行させたりする攻撃としても有名なXSS。
今回はそれに近いような投稿も見られました。思いっきりJavaScriptらしきメッセージが投稿されていますね。^^;
コードの内容としては、「Test」という文字列をダイアログボックスに表示するだけのものですが、
投稿したメッセージの「<」や「>」を無害化する処理を実装済みであるため
特に何も実行はされませんでした。3.ゲストログイン機能のゲストユーザー情報を書き換えられる
今回作ったアプリには、「かんたんログイン」ボタンを押すと、予め用意されている
「ゲストユーザー」としてログインできるような機能があります。
(ユーザー名、メールアドレス等を入力しなくても簡単にログインできる)イメージはこちらです↓
この機能の使用上、ゲストユーザーの
ユーザー名
やメールアドレス
を変更されると、ゲストログイン機能が動かなくなってしまいます。そこで、ユーザープロフィール編集機能では、ゲストユーザーでログインしている時だけ
ユーザー名
やメールアドレス
を変更できないように工夫しました。仕組みとしては、ゲストユーザーでログインしている時だけ、Viewの
< input >タグにreadonly属性
が付与されたものが表示され、テキストボックスが灰色になって入力できなくなるようにしていました。しかし、この対策だけでは結構マズくて、いとも簡単にゲストユーザーのユーザー名やメールアドレスを書き換えられてしまいました。
ある日ゲストログインしたら、ユーザー名が突然「にゃ〜ん」というものに変えられていて、めちゃめちゃ焦りました!!!^^; 笑おそらくChrome等のデベロッパーツールを使ってHTMLを改ざんされてしまったのだと考えられます。
デベロッパーツールで< input >タグの
readonly="readonly"
を削除すると、ただのテキストボックスになり
ユーザー名やメールアドレスが普通に変更できるようになってしまいます↓
デベロッパーツールって万能ですね・・
この時フロントエンド側だけでの対策がいかにマズイのかを学びました^^;
バックエンド側でも、ゲストユーザーのメールアドレス等を変更できないように対策することにしたところ
今回の問題は無事に解決しました。
その時の対策方法は、こちらの記事にまとめています。
Laravel6系でゲストログイン機能(かんたんログイン)の実装最後に
今回はざっと、公開したポートフォリオアプリへのイタズラをまとめてみましたが、
この経験を通して学びも多かったです。
セキュリティ面の実装の甘さに気付けたり、NGワード機能を追加してみようかな?と新たなアイディアが浮かんだり等々。。
今後はセキュリティ面を強化した実装等をより心がけていきたく思います!
- 投稿日:2021-01-05T06:40:10+09:00
PHP Debug + Xdebug Ver3.X系 はphp.iniに追記する設定項目が違うよって話
はじめに
Mac PHP Visual Studio Code Xdebugを用いたローカル開発環境でデバッグをできるようにする
↑の記事を参考にXdebug + PHP Debug環境を構築していたら、
- phpInfoではXdebugの存在を確認できる
- var_dump()もそれっぽい挙動をしてくれる
- でもブレークポイントで止まってくれない
といった状況で少々「むむむ・・・」となった。
解決方法
Xdebugは正常挙動っぽいのでおそらくVSCode側の何かしらが原因だろうと思い、
ひとまずVSCodeのPHP DebugのDetailsを確認めちゃくちゃ丁寧に案内されてた
というわけで
touch ~user/Desktop/php_info.txt php -i >> ~user/Desktop/php_info.txtでphpInfoの内容を書き出して、
php_info.txtConfiguration File (php.ini) Path => /Applications/MAMP/bin/php/php7.4.9/conf Loaded Configuration File => /Applications/MAMP/bin/php/php7.4.9/conf/php.iniphp.iniのパスを確認して、
Ver2.X系
php.ini[xdebug] zend_extension="/Applications/MAMP/bin/php/php7.4.9/lib/php/extensions/no-debug-non-zts-20190902/xdebug.so" xdebug.remote_enable = 1 xdebug.remote_autostart = 1と記載していたのを、
Ver3.X系
php.ini[xdebug] zend_extension="/Applications/MAMP/bin/php/php7.4.9/lib/php/extensions/no-debug-non-zts-20190902/xdebug.so" xdebug.mode = debug xdebug.start_with_request = yes xdebug.client_port = 9000に修正したらブレークポイントでしっかり止まってくれるようになった。
終わりに
そもそも作業前にまず一次情報のInstllationを確認しようねって脳内の自分に怒られました。