1. PHPのエラーとは?発生する理由と主な4つの種類(レベル)
プログラミングを学習していると、画面に英語のメッセージが表示されたり、画面が真っ白になったりして焦ることがあります。これらが「エラー」ですが、実はエラーは「プログラムが正しく動かない原因を教えてくれる親切なメッセージ」です。
まずは、エラーが発生する主な理由と、PHPにおける4つの主要なエラーレベル(重要度)について理解しましょう。
エラーが発生する主な理由
エラーが発生する原因は、主に以下の2つに大別されます。
- 文法の間違い(構文エラー):書き方のルール違反です。「てにをは」の間違いのようなもので、コンピュータが命令を理解できない状態です。
- 実行時の不整合:文法は合っていても、処理の途中で無理が生じた状態です(例:存在しないファイルを開こうとした、計算できないものを計算しようとしたなど)。
PHPの主な4つのエラーレベル
PHPのエラーには「レベル(深刻度)」があり、それによってプログラムが止まるかどうかが変わります。初心者がまず覚えるべきは以下の4つです。
| エラーの種類 | 英語表記 | 深刻度 | 状態 | 特徴 |
|---|---|---|---|---|
| パースエラー | Parse error | 高 | 停止 | 文法ミス。プログラムがそもそも起動しない。 |
| フェイタルエラー | Fatal error | 高 | 停止 | 致命的なミス。実行中にこれ以上進めない。 |
| ワーニング | Warning | 中 | 継続 | 警告。おかしい点はあるが、処理は止まらない。 |
| ノーティス | Notice | 低 | 継続 | 注意。軽微なミスや推奨されない書き方。 |
2. 【Parse error】構文エラーの原因と見つけ方:セミコロンや括弧の忘れ
Parse error(パースエラー)は、PHP初心者が最も頻繁に遭遇するエラーです。「Syntax error(シンタックスエラー)」とも呼ばれ、プログラムの書き方(文法)自体が間違っているため、処理が一行も実行されずに止まってしまいます。
よくある原因
もっとも多い原因は、単純な入力ミスです。
- セミコロン(;)の忘れ:行末の締めくくり忘れ。
- 括弧の閉じ忘れ:() や {} の数が合っていない。
- 全角スペースの混入:コードの中に目に見えない全角スペースが入っている。
具体的で実践的なコード例
以下のようなコードを書くと、Parse errorが発生します。
<?php
// セミコロンを忘れている例
$message = "こんにちは"
echo $message;
?>
エラーメッセージ例:
Parse error: syntax error, unexpected token “echo” in /path/to/file.php on line 4
見つけ方と対処法
エラーメッセージには「エラーが発生した行番号(on line X)」が表示されます。しかし、Parse errorの場合、「指摘された行の1つ前の行」に原因があることが非常に多いです。
上記の例でも、エラーは4行目のechoで出ていますが、原因は3行目の末尾にセミコロンがないことです。
ポイント: 文法エラーが出たら、指摘された行だけでなく、その直前の行の末尾も必ずチェックしましょう。
3. 【Fatal error】致命的なエラーへの対処法:関数やファイルの記述ミス
Fatal error(フェイタルエラー)は、「致命的なエラー」という意味です。文法は正しいものの、実行しようとした内容が物理的に不可能である場合に発生し、その時点でプログラムが強制終了します。
よくある原因
- 未定義の関数の呼び出し:定義されていない(またはスペルミスの)関数を使おうとした。
- ファイルの読み込み失敗:require で指定したファイルが存在しない。
- メモリ不足:処理が重すぎて、サーバーのメモリ上限を超えた。
具体的で実践的なコード例
関数名のスペルミス(Typo)は非常によくあるケースです。
<?php
function sayHello() {
echo "Hello!";
}
// 関数名を間違えている(sayHello → sayHelo)
sayHelo();
?>
エラーメッセージ例:
Fatal error: Uncaught Error: Call to undefined function sayHelo() in …
対処法
「Undefined function(未定義の関数)」と表示されたら、まずは関数名のスペルを確認してください。また、外部ファイルを読み込んでいる場合は、ファイルパス(ファイルの場所)が正しいかどうかを確認しましょう。
4. WarningとNoticeの違いは?プログラムが止まらないエラーの注意点
Warning(警告)とNotice(注意)は、エラーが出てもプログラムの処理自体は止まらずに最後まで実行されるのが特徴です。しかし、これらを放置すると予期せぬバグやセキュリティホールの原因になります。
Warning(ワーニング)とは
「処理は続行できるが、明らかに異常がある」状態です。
例えば、include でファイルを読み込もうとしてファイルが見つからない場合などに発生します。ファイルがなくても処理は進みますが、必要なパーツが欠けたまま動くため、Webサイトの表示が崩れる原因になります。
<?php
// ファイルがない場合、Warningが出るが処理は進む
include 'not_exist_file.php';
echo 'この文字は表示されます';
?>
Notice(ノーティス)とは
「実行に大きな影響はないが、書き方として正しくない」状態です。
変数を定義せずにいきなり使った場合などによく見られます。
<?php
// 定義していない変数 $user を表示しようとしている
echo $user;
?>
エラーメッセージ例:
Notice: Undefined variable: user in …
注意点:放置してはいけない理由
これらはプログラムが止まらないため、「動いているから大丈夫」と無視されがちです。しかし、本番公開後にサーバーの設定が変わるとエラーメッセージが画面に表示され、ユーザーに見えてしまうリスクがあります。開発段階ですべて解消(修正)しておくのがプロの鉄則です。
5. PHPエラーメッセージの基本的な読み方と解読のコツ
エラーメッセージは英語で書かれているため難しく感じますが、実は決まったフォーマットで書かれています。以下の3つの要素さえ読み取れれば、解決の糸口はすぐに見つかります。
エラーメッセージの解剖図
典型的なエラーメッセージを分解してみましょう。
Parse error: syntax error, unexpected token "echo" in C:\xampp\htdocs\index.php on line 5
- エラーの種類(何が起きたか)
Parse error: syntax error→ 「文法の間違いです」 - エラーの詳細(原因のヒント)
unexpected token "echo"→ 「予期しない echo がありました(直前に何かが抜けている可能性が高い)」 - 発生場所(どこで起きたか)
in ...\index.php on line 5→ 「index.phpというファイルの、5行目で発見しました」
効率的な解読のコツ
- 行番号を見る:まずは
on line XXを見て、その行へ飛びます。 - 単語を拾う:
Undefined(未定義の~)unexpected(予期しない~)No such file(そんなファイルはない)
- 検索する:メッセージをそのままコピーしてGoogle検索すれば、同じ現象に遭遇した人の解決策が見つかります(その際、自分のファイルパス部分は削除して検索しましょう)。
6. エラーが表示されない時は?php.iniの設定とWordPressのデバッグモード
開発中に「画面が真っ白のまま何も表示されない」という現象が起きることがあります。これは「エラーを画面に表示しない設定」になっているためです。
php.iniの設定(ローカル開発環境など)
PHPの設定ファイルである php.ini を編集することで、エラー表示をコントロールできます。開発中は以下の設定を有効にしましょう。
display_errors = On
エラーをブラウザ画面に出力するかどうか。開発時は On、本番公開時は Off にするのが基本です。
error_reporting = E_ALL
どのレベルのエラーまで報告するか。E_ALL にすると、軽微なNoticeレベルまで全て表示してくれます。
WordPressのデバッグモード
WordPressを使用している場合、php.ini ではなく、WordPressの設定ファイル(wp-config.php)を編集するのが一般的です。
wp-config.php の設定例:
// デバッグモードを有効化(エラーが表示されるようになる)
define( 'WP_DEBUG', true );
// 画面には出さず、debug.log ファイルにエラーを保存する場合
define( 'WP_DEBUG_LOG', true );
define( 'WP_DEBUG_DISPLAY', false );
これにより、画面上にエラーが表示され、原因特定ができるようになります。
7. 効率的にバグを修正するためのデバッグ手法とおすすめツール
最後に、エラー修正(デバッグ)を効率化するための手法とツールを紹介します。
基本的なデバッグ手法:変数の身を確認する
エラーの原因の多くは「変数に思い通りのデータが入っていない」ことです。これを確認するために、以下の関数を使います。
- var_dump($変数名):
変数の中身(型や値、文字数など)を詳細に表示します。配列やオブジェクトの中身を確認するのに最適です。 - print_r($変数名):
var_dump よりも少し簡易的な表示です。ざっと配列の構造を見たい時に便利です。
$fruits = array("apple", "orange");
echo "<pre>"; // 改行されて見やすくなる
var_dump($fruits);
echo "</pre>";
おすすめのツール(IDE拡張機能など)
テキストエディタに機能を追加することで、エラーを未然に防ぐことができます。
- VS Code(Visual Studio Code)
現在のWeb開発で最も標準的なエディタです。 - PHP Intelephense(VS Code拡張機能)
コードを書いている最中に、「セミコロンが抜けています」「この変数は定義されていません」と赤波線で教えてくれます。これを入れるだけで、構文エラーの8割は防げます。 - Xdebug
中級者向けですが、プログラムを一時停止させて、その瞬間の変数の状態を確認できる強力なツールです。
まとめ
エラーは「失敗」ではなく、プログラムを完成させるための「道しるべ」です。エラーメッセージを読み解くスキルがつけば、Web開発のスピードは劇的に向上します。まずは恐れずに、表示された英語を読んでみることから始めましょう。