エラー処理

エラー処理及びログ記録について。

セキュリティー向上の為にすべきこと。

PHPコードの実行時にエラーが発生した場合、通常返されるPHPのエラーは、発生したエラーの内容、エラーを発生したファイルの名前、エラーを発生した行番号のような情報が含まれます。これは、スクリプトをデバッグする開発者には非常に有用な情報である一方で、本番のシステムでは悪質な利用者に知られては困る情報も含み得る為に大変危険(謂わば、諸刃の剣)です。ですから、安全対策(セキュリティー向上手段)として、実行するコードのエラーリポートを完全に無効にすることがPHP マニュアルでも強く推奨されています。

実行するコードのエラーリポートを完全に無効にするには、以下の2種類の方法があります。セキュリティー向上の為にも、本番のシステムでは、何れかの方法でエラーリポートを完全に無効にすべきでしょう。

後者の方法ならば、PHPファイルの冒頭にでも記述しておくと良い。

<?php
// 全てのエラー出力を無効にする。
error_reporting(0);
...
?>

これにより、実行時に発生し得る全てのエラー出力を無効にすることが可能です。また、エラー処理及びログ記録を行う関数により、独自のエラー処理規則を定義することもできます。

独自エラー処理クラス

概要

実用サイト(本番のシステム)とローカルな試験サイトでのエラーリポートの方法を簡単に設定しておくことができます。

ErrorHandlerクラス

public class ErrorHandler extends Object

構造

クラスの使用例

次の例は、ErrorHandler.phpを使用したサンプルです。

<?php
ini_set("include_path", "./");
// require_once("org/purl/net/osamurai/error/ErrorHandler.php"); // for PHP 4
require_once("error/ErrorHandler.php"); // for PHP 5

$errorHandler = new ErrorHandler;
// エラーハンドラの設定
set_error_handler(array(&$errorHandler, "handler"));
// デバッグの設定
switch (strtolower($_SERVER['HTTP_HOST'])) {
case "127.0.0.1":
case "localhost":
  $errorHandler->debug(true);
  break;
default:
  $errorHandler->debug(false);
  $errorHandler->setLog("/home/username/php_error.log",
                        E_WARNING | E_NOTICE | E_USER_ERROR | E_USER_WARNING | E_USER_NOTICE);
}
?>

注釈