けいブログ

プログラミングとお金の知識を身につけていくブログ

PHPメモ:エラー

 

PHPのエラーの基本について整理しました。 

 

エラーに関する設定

主な設定項目

error_reporting

出力するエラーのレベルを設定する。

E_ALLと設定すると全てのエラーメッセージを出力する。

 

display_errors

エラーを画面に表示するかどうか設定する。

開発中はエラーの内容を把握するために有効にしておくが、運用中にエラーが表示されると、悪質なユーザーにとって攻撃のヒントとなってしまったり、ページのデザインが崩れてしまうため無効にする。

 

log_errors

エラーを記録するかどうかを設定する。 ログはエラーの記録のこと。

開発中も運用中も有効にしてエラーのログをとることで、プログラムのどの部分でエラーが起きているか把握できる。

 

設定方法

php.iniファイルで設定する

php.iniファイルで設定すると、設定がphpファイル全体に影響する。

php.iniファイルとはPHPのプログラムを動かすための設定が書かれたファイルのこと。MAMPを使っている場合、MAMP/bin/php/php7.3.8/conf/php.iniでファイルを見つけることができる。php.iniファイルに先程の設定項目が書かれているので、それをいじることで設定を変更できる。

スクリプトの実行前にエラーが発生することもあるため、なるべくphp.iniファイルで設定することが望ましい。

 

それぞれのphpファイルで設定する

phpファイルのコードの始めに直接設定を書く方法で、記述したファイルのみ設定が影響する。

php.iniファイルで設定するときとは違い、エラーを出力するファイルと出力しないファイルを分けることができる。

 

具体的なコードの例はこんな感じ。 書き方は他にもある。

<?php
error_reporting(E_ALL); 全てのエラーを報告する
ini_set('display_errors','on'); エラーを表示する
ini_set('log_errors','on'); ログを記録する
ini_set('error_log','php.log'); php.logにログを記録する
?>

 

エラーメッセージ

エラーメッセージは

エラーレベル:エラーメッセージ:エラーが起きた場所といった構造になっている。

 

Notice: Undefined variable: var in /Applications/MAMP/htdocs/php/index.php on line 10

 

Noticeレベルのエラーで、変数が未定義であり、index.phpの10行目のvarの部分、といった意味。ただし必ずしも表示されている行でエラーが起きているとは限らない。

 

エラーレベル

E_ERROR

致命的なエラーで、処理が中断される。 Fatal Errorと表示される。

 

E_WARNING

実行時の警告。処理を止めるほどではないが、修正が必要なエラー。エラーを表示したままスクリプトを実行する。

 

E_PARSE

コンパイル時のパースエラー。文法を間違えたときに起こる。Parse Errorと表示される。

コンパイルとはプログラミングの言語で書かれたコードをコンピュータが実行可能な機械語に翻訳すること。機械語は0と1で表現されるもの。

パースとは解析という意味。

 

コンパイルはスクリプトの実行前なので、スクリプトは実行されない。

 

E_NOTICE

実行時の注意。エラーを表示したままスクリプトを実行する。E_WARNINGに比べると無視しても問題ないぐらいの軽いエラーだが、出来るだけなくすほうが良い。

 

E_DEPRECATED

将来のバージョンで動作しなくなるコードを書いた時のエラー。

 

エラーが出たときの対処法

ググる

エラーメッセージをそのままコピペして、解決方法を探す。エラーメッセージと解決方法はセットでメモか何かに記録しておくと後々便利。

 

変数の中身を確認する

var_dump();やprint_r();を使って変数の中身を表示して、変数に値が入っているか、想定した値が入っているかどうかなどをチェックする。

 

ログを確認する

ログを見ることによってどこでエラーが起きたか調べやすくなる。

 

参考

エラー設定 

https://www.php.net/manual/ja/errorfunc.configuration.php#ini.display-errors

 

エラー処理

https://www.php.net/manual/ja/language.errors.basics.php

 

エラーレベル

https://www.php.net/manual/ja/errorfunc.constants.php