PHP のエラーメッセージ
このページは、PHP のエラーメッセージの訳、エラーの発生理由、エラーの修正方法をまとめる予定のページです。
目次
注意
- このページを作ったひとが記録のために記載しているため網羅性はありません。
一覧
Parse error: syntax error, unexpected '○○' (○○)
意訳
解析エラー: 文法エラー, 予期しない (コードの一部)
発生理由
実行するソースコードが PHP の文法にあっていません。
修正方法
- ソースコードの間違いが無いか確認する
- 例: スペルミス
- 例: 半角スペースなどでの字下げの中に全角が混じっている
Warning: Use of undefined constant ○○ - assumed '○○' (this will throw an Error in a future version of PHP)
意訳
警告:未定義の定数 ○○ の使用 - '○○' (文字列) と仮定します (これはPHPの将来のバージョンではエラーを発生させます)
発生理由
使用しようとした定数が存在していません。
修正方法
- 定数名のスペルミスが無いか確認する
- 定数では無く、ただの文字列を使いたかった場合は
'
か"
で囲む (foo
→'foo'
)
Notice: Undefined index: ○○
意訳
通知: 未定義のインデックス: (キー名)
発生理由
配列に存在しないキーを指定して値を取り出そうとしています。
$_GET
, $_POST
, $_SESSION
等、「あると思っていたキーが実際には無かった」時によく発生します。
修正方法
- キーがあるか確認する
- 例:
isset()
を使ってif (isset($arr['a'])) echo $arr['a'];
のようにキーがあるときだけ処理をする
- 例:
Notice: session_start(): A session had already been started
意訳
通知: session_start(): セッションはすでに開始されています
発生理由
session_start()
を2回以上実行しています。
修正方法
- 複数
session_start()
を実行している箇所が無いか確認し、不要な箇所は削除する session_status()
の戻り値がPHP_SESSION_ACTIVE
か (セッションの状態がアクティブか) を事前にチェックし、PHP_SESSION_ACTIVE
の時はsession_start()
しない
Fatal error: Uncaught Error: Call to undefined function ○○()
意訳
致命的なエラー: 未捕捉のエラー: 未定義の (関数)() の呼び出し
発生理由
呼び出した関数が存在していません。
修正方法
- コードのスペルミスが無いか確認する
- 使用したい関数が使用している PHP のバージョンに存在するか確認する
- 例:
mysql_connect()
などの MySQL 関数は PHP 7 には存在しません - 例:
split()
は PHP 7 には存在しません
- 例:
Warning: count(): Parameter must be an array or an object that implements Countable
意訳
警告: count(): パラメーターは Countable を実装する配列またはオブジェクトでなければなりません
発生理由
count()
に与えた変数に null
が入っているなど、count()
できない値を count()
に渡すと発生します。
修正方法
count()
に渡す値がcount()
できる値なのか確認する- 例:
is_array()
やis_countable()
で事前にチェックする
- 例:
Warning: mb_send_mail(): "sendmail_from" not set in php.ini or custom "From:" header missing
意訳
警告: mb_send_mail() php.iniで "sendmail_from" が設定されていないか、カスタムの "From:" ヘッダーがありません
発生理由
送信メールの From
(差出人アドレス) にあたる箇所の指定が php.ini にもコードにも指定されていません。
修正方法
mb_send_mail()
の4番目の引数に From を設定する (例mb_send_mail($to, $subject, $message, 'From: test@example.com');
)php.ini
のsendmail_from
に From のメールアドレスを指定する
Warning: mb_send_mail(): Failed to connect to mailserver at "localhost" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set()
意訳
警告: mb_send_mail(): "localhost" ポート 25 でメールサーバーに接続できませんでした。php.iniの "SMTP" および "smtp_port" 設定を確認するか、ini_set() を使用してください
発生理由
XAMPP などで、メールの送信サーバーの設定がされていないか誤っています。
修正方法
(XAMPP の場合の例)
C:\xampp\php\php.ini
内に記載されているsendmail_path
をsendmail_path = C:\xampp\sendmail\sendmail.exe
に変更C:\xampp\sendmail\sendmail.ini
に記載されている設定を変更 (主に下記)
smtp_server
(送信サーバー名)smtp_port
(ポート)auth_username
(ユーザー名)auth_password
(パスワード)
- Apacheを再起動
Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; ○○ has a deprecated constructor
意訳
非推奨: クラスと同じ名前のメソッドは PHP の将来のバージョンではコンストラクターではなくなります。 (クラス名) には非推奨のコンストラクタがあります
発生理由
昔の PHP ではクラスのコンストラクタはクラスと同名にすることになっていましたが、PHP 5 からは __construct
という名前に変更になっており、PHP 7 ではクラスと同名のメソッドがあると非推奨エラーになります。
修正方法
- クラスと同名のメソッドの名前を
__construct
に変更する。コンストラクタでなければ別の名前にする