ブラウザにエラーメッセージを表示させる方法
MAMPは初期設定では、ブラウザにエラーメッセージを表示しません。
試しに、以下のPHPをブラウザで表示してみます。
echo $hello;
$helloは定義していないのでエラーになりますが、画面には何も表示されません。
これではどういう状態なのかわからないので、エラーメッセージをブラウザに表示するよう設定します。
該当のphp.iniのパスを確認する
パスはphpinfoで確認できます。
phpinfoは、MAMPのスタートページ内にあるリンクから飛べます。
例では、C:\MAMP\conf\php7.4.16\php.ini がパスです。
php.iniファイル内の「display_errors」を「on」に書き換える
上書き保存し、サーバーを再起動する
再起動しないと変更が反映されないので注意してください。
再起動ボタンはないので、停止→起動をします。
hello が定義されていないよ、というエラーメッセージを表示することができました。
これでエラーの原因をすぐに特定することができます。
MAMPのログの見方
MAMPのログファイルは、MAMP/logsディレクトリの中にあります。
主なログファイル
●PHP: php_error.log
●Apache: apache_error.log
●MySQL: mysql_error_log.err
tailコマンド
ログファイルを見るときに便利なのが、tailコマンドです。
tailは最終行から数行(標準は10行)を表示してくれます。
さらに-fオプションをつけると、ファイルが更新されたときに追跡してくれます。
tail -f php_error.log
よくあるエラー
Apache couldn’t be started because port 80 is in use by some other software.
ポート80は使用中です、というエラーなので、使用中のものを終了にすればOKです。
WindowsとMacでコマンドは異なりますが、流れは同じです。
①ポートを使用中のPID(プロセスID)を確認
②プロセスを削除
●Windowsの場合
netstat -aon | find "80" // ①ポート80を使用しているプロセスを確認
TCP 0.0.0.0:80 0.0.0.0:0 LISTENING 12345
TCP [::]:80 [::]:0 LISTENING 12345
taskkill /pid 12345 // ②プロセス削除
taskkill /f /pid 12345 // ②プロセス強制削除(上記で削除できない場合)
①で「’netstat’ は、内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチ ファイルとして認識されていません。」と表示される場合は、環境変数の設定が必要です。
①Windowsの検索窓に「システム」と入力
②「システム環境変数の編集」をクリック
③「環境変数」をクリック
④システム環境変数内の「Path」を選択した状態で「編集」をクリック
⑤「新規」で「C:\Windows\System32」を入力し「OK」
●Macの場合
lsof -i:80 // ①ポート80を使用中のプロセスを確認
httpd 1234 user 4u IPv6 0a123456b7c8d9012 0t0 TCP *:http (LISTEN)
httpd 12345 user 4u IPv6 0a123456b7c8d9012 0t0 TCP *:http (LISTEN)
kill 1234 // ②プロセス削除
SQLSTATE[HY000] [2002] No such file or directory
php artisan migrate実行時のエラーです。
config/database.phpにsocketの追加をすることで解決しました。
// config/database.php
'unix_socket' => env('DB_SOCKET', '/Applications/MAMP/tmp/mysql/mysql.sock'),
MAMPが起動後すぐ終了してしまう
原因は誤ってPHPの旧バージョンを削除してしまっていたことでしたが、エラーメッセージも何も出ずにすぐに閉じてしまうので困りました。
MAMP/logs/MampAppErr.logで原因を特定できたので、削除してしまったバージョンのPHPを公式からインストールし直すことで解決しました。