前回fopen、fclose、fgets、fwrite、dieという5つの関数を使用して、簡単なファイルの入出力についてをまとめましたが、この中でエラー処理に使用するdie関数について、注意しなければならないことがあります。
それはdie関数を実行した時点でエラーメッセージを表示しプログラム処理が終わってしまうという事です。これにより、無限ループになったりする事が無く、またエラーメッセージが表示されるのでデバッグがし易くなりますが、実際のサイト運用の際にはほとんどの場合不適切であると思われます。
そこで使用するのがエラー制御演算子『@』です。これをfopen関数の直前に記述します。以下はその例になります。
if($filehandle = @fopen("./test.dat", 'r')){
while(!feof($filehandle)){
$buffer[] = fgets($filehandle);
}
fclose($filehandle);
}
fopen関数の前に記述する事で、エラーを表示しなくなり、このif文を抜けて次の処理に入ります。また上記のスクリプト中ではfgets関数の部分でもエラーが発生してしまう事が多いので、そこにも記述するとよいと思います。
エラーが出るところで毎回これを付けていると結構な量になるんで、実際には一括して表示をしないようにするコマンド(?)を使う事の方が多いかもしれません。(これに関してはいずれ。) ですが、まずはこのエラー制御演算子『@』を覚えておくととても便利です。
■気を付けたい事
これを付ける事によって、実際の運用上は問題が無くなるかもしれませんが、付けた関数に関わるあらゆるエラーを回避してしまうので、内部的にはエラーが発生しているのに、それに気付かない可能性があります。そのため、充分なデバッグを施してからにすべきであると思われます。
また、逆にエラーが表示されることに関してはセキュリティ上問題があると思われます。このようなPHPプログラミングにおいてのセキュリティに関しては下記書籍がオススメです。
※ちなみにこの記事は過去に別ブログで掲載していたものを若干加筆修正したものです。