11
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【PHP入門】画面にエラーを表示する方法

Posted at

※こちらの記事は、プロスタ編集部が学習者の多いPHPの技術系記事を公開することで、皆様の学習にお役に立ちたい意図で投稿しております。
参考サイト:【PHP入門】画面にエラーを表示する方法

#【PHP入門】画面にエラーを表示する方法

PHPでプログラムを作成中に不具合が発生した場合に、ブラウザなどの画面上でエラー確認しながら、対応する場面はよくあります。
今回は、エラーを表示する方法として「display_errors」とPHPの設定項目を使った方法を紹介します。

display_errorsは以下の2パターンで設定が可能です。

1.php.iniで設定する

2.ini_setを用いてphpファイル内で設定する

今回は以下のコード「sample.php」を使って、上記2種類の方法を比較しながら、紹介していきます。

<?php
// 正常なコード
echo "start<br/>";

// 変数の前に$がないのでエラーになる
echo test == 1;

// 正常なコード
echo "end<br/>";

##php.iniで設定する

プログラムを作成/動作確認しているWebサーバの設定が変更可能な場合は、php.iniの以下の項目を、

display_errors = OFF

以下のように変更することで、エラーを画面に表示可能です。

display_errors = ON

php.iniを設定後は、Webサーバを再起動することで、設定が反映されます。
上記を設定後、ブラウザで最初に提示したプログラムのPHPファイルにアクセスすると、「Notice: Use of undefined constant test – assumed ‘test’ in /Library/WebServer/Documents/sample.php on line 6」と画面上に表示されます。

##ini_setを用いてphpファイル内で設定する

前述のphp.iniで設定する方法は、設定変更後にWebサーバを再起動する必要があります。その場合、レンタルサーバーや商用環境で使用しているサーバでは、設定変更をすることが困難な状況もあります。

そこでPHPのファイル内でdisplay_errorsを設定する方法として、ini_set関数を使用した方法を紹介します。エラーを確認したいファイルの先頭など、検証したいコードの前に以下のコードを追加します。

// エラー表示なし
ini_set('display_errors', 0);
 
// エラー表示あり
ini_set('display_errors', 1);

上記の「エラー表示あり」の設定を追加してファイルを保存後、先ほど同様にブラウザでアクセスすると、同様にエラーが表示されるようになります。
ここでの違いは設定値がON/OFFではなく、1/0での設定によるものです。

ただし下記のようなプログラムのタイプミスによりエラーは、PHPのプログラム解析中のエラーになるため、ini_set関数でdisplay_errorsを設定しても、画面上にエラーメッセージが表示されません。

// echo関数のタイプミスによるエラー
echoi "test"

これはPHPのプログラムファイルが実行途中でエラーになり、ini_set関数の実行による設定が反映される前にプログラムが終了してしまうためです。このような場合には注意が必要です。

11
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?