PHP エラー演算子 【初級編 第27回】

この記事は2012年11月28日に書かれたものです。内容が古い可能性がありますのでご注意ください。


PHP エラー演算子 【初級編 第27回】

エラー制御演算子

前回は加算子・減算子について記述しました。
今回はエラー演算子について記述していきたいと思います。

エラー制御演算子の概要

エラー制御演算子は、他の演算子のように値を比較したり、計算したりするのではなく、
通常、PHPのコードに誤りがあった場合にWebからPHPを実行すると
エラーメッセージが表示されますが、これを表示したくない場合などに使用します。

エラー制御演算子の確認

エラー制御演算子でメッセージの出力を制御できるかを確認しようと試してみましたが
デフォルトでエラー出力が表示されないように設定されていました。(バージョンは PHP 5.2.17 です)

以下のように、存在しないファイルである nontext.txt ファイルの内容を表示しようとすると
Warningメッセージが表示される予定でしたが、最初からメッセージが抑制されていました。

<?php
 $fp = fopen('nontext.txt', 'r');   // nontext.txt は存在しない
 $mes = fread($fp, filesize('nontext.txt'));
 fclose($fp);
 print $mes;
?>

Webから確認してみるとまっさらなページのみが表示され、Warningは出ませんでした。
ブラウザ確認画像

エラーメッセージの強制表示

エラーの出力をしたい場合はPHPコード内で下記の記述をすると表示されるようになります。
ini_set(‘display_errors’, 1);

下記では試しに存在しないファイルを読み込んだ場合に出力されるWarningメッセージを
エラー出力演算子で制御できるかを確認してみたいと思います。

下記のようにコードを記述し、読み込むファイルである nontext.txtが存在しない状態でWebからこのファイルを実行すると、
エラーメッセージが表示されました。

<?php
 ini_set('display_errors', 1);
 $fp = fopen('nontext.txt', 'r');
 $mes = fread($fp, filesize('nontext.txt'));
 fclose($fp);
 print $mes;
?>

ブラウザ確認画像

ini_set の値が 0 になっているとエラーを表示しません
まっさらなページが表示されます。
ini_set(‘display_errors’, 0);

ブラウザ確認画像

ちなみにエラーの出力は、Apache の .htaccess に以下のように記述しても制御できるようです。
エラーを出力したい場合
php_flag display_errors = Off
エラーを出力したくない倍
php_flag display_errors = On

エラー制御演算子の効果の確認

ini_set の値を 1 にし、Warningメッセージが表示されるようにした状態で、
エラー制御演算子を使用すると、エラーの出力を制御することが確認できました。

エラー制御演算子の記述方法は下記のようにそのエラーが出てほしくない関数名などの前に @(アットマーク)を記述します。
以下では fread 関数だけエラーメッセージを表示しないようにしてみました。

<?php
 ini_set('display_errors', 1);
 $fp = fopen('nontext.txt', 'r');
 $mes = @fread($fp, filesize('nontext.txt'));
 fclose($fp);
 print $mes;
?>

Webから確認してみると、4行目だけエラーメッセージが表示されず、@ の効果が確認できました。
ブラウザ確認画像

エラー制御演算子で制御できないもの

エラー制御演算子はエラーメッセージを制御するのが役割ですが、以下のようなものはエラー制御演算子で制御できません
・スクリプトが停止してしまうような致命的なエラー
・文法的な間違いによるエラー

今回はここまでで次回も引き続き演算子について記述していきたいと思います。

  • このエントリーをはてなブックマークに追加

PAGE TOP