【Codeigniter】エラーを画面に表示させない方法【PHP】

【Codeigniter】エラーを画面に表示させない方法【PHP】

こんにちは。
今回はPHPのフレームワークである「Codeigniter」で構築されたwebシステムの
エラーメッセージを画面に表示させない方法についてです。

まず、エラーメッセージを画面に表示させない理由についてですが、
単純にエラーをユーザーに見せたくない、あるいは見せる必要が無いからです。
エラーの情報というのは、開発者にとっては有益な情報となりますが、
何も知らないユーザーから見ると、
何だか得体の知れないサイトにアクセスしてしまったという恐怖心しか与えません。

アクセスしたページにいきなり
「syntax error!! index.php in line142 ◎△$♪×¥●&%#?!」みたいな文字が表示されると
ビックリしますよね。

逆に、エラーメッセージを画面に表示しない設定にしている状態でエラーが発生すると、
画面に何も表示されないので、結果的に真っ白なページが表示されてしまい、
その設定を知らない開発者が原因を解明できずにハマってしまうケースもあるようです。
というより、僕自身が実際そうでした。

ということで、エラーが発生した際、
画面上にエラーメッセージを表示、非表示にする方法を説明していきたいと思います。

定数:ENVIRONMENTの定義内容を変更する

変更するのは、[ENVIRONMENT]という定数だけです。
※ENVIRONMENTが定義されている箇所は、ディレクトリ構成などによって異なりますので、
明言を避けますが、一番手っ取り早いのはエディタやIDEの一括検索で
「define(‘ENVIRONMENT’」というように検索してしまうのが良いと思います。

ENVIRONMENTを定義している箇所を見つけたら、
以下のソースコードの1行目のように、定数の内容を「production」に変更しましょう。
そうすれば、エラーが発生した場合も画面上にエラーメッセージが表示されなくなります。

define('ENVIRONMENT', 'production');

if (defined('ENVIRONMENT'))
{
	switch (ENVIRONMENT)
	{
		case 'development':
			ini_set('display_errors', 'On');
			error_reporting(E_ALL);
		break;
		case 'production':
			ini_set('display_errors', 'Off');
			error_reporting(0);
		break;

		default:
			exit('The application environment is not set correctly.');
	}
}

ソースコードの3行目以降を見ればわかりますが、
これは何をしているかというと、定数の内容によって、
php.iniのdisplay_errorsというエラーの表示設定を変更しているだけです。

これを見ればわかる通り、
ENVIRONMENTの定義内容が「development」の場合、エラーを画面に表示する。(8行目)
ENVIRONMENTの定義内容が「production」の場合、エラーを画面に表示しない。(12行目)
ということになります。

まとめ

開発途中の段階などで、エラーメッセージを画面に表示させたい場合、
ENVIRONMENTという定数に「development」を定義する。

本番環境に公開しているなど、エラーメッセージを画面に表示させたくない場合、
ENVIRONMENTという定数に「production」を定義する。