これは、ロードされた構成とランタイム構成の問題です
構文エラーまたは解析エラーがコンパイルまたは解析ステップ中に発生することを認識することが重要です。つまり、コードを実行する前にPHPがベイルします。したがって、display_errors
ランタイム中にPHPの構成を変更する場合(これにはini_set
、コードでの使用から、ランタイム構成ファイルである.htaccessの使用までが含まれます)、デフォルトでロードされた構成設定のみが機能します。
開発中のWSODを常に回避する方法
WSODを回避するには、ロードされた構成ファイルがdisplay_errors
オンにerror_reporting
設定されていることを確認する必要があります-1
(これは、実行しているPHPのバージョンに関係なくすべてのビットがオンになるため、同等のE_ALLです)。E_ALLの定数値をハードコーディングしないでください。その値は、PHPの異なるバージョン間で変更される可能性があるためです。
読み込まれた設定は、読み込まれたphp.ini
ファイルか、apache.conf
or httpd.conf
またはvirtualhostファイルのいずれかです。これらのファイルは、起動段階(たとえば、Apache httpdまたはphp-fpmを最初に起動するとき)に一度だけ読み取られ、実行時の構成変更によってのみ上書きされます。ていることを確認して作るdisplay_errors = 1
とerror_reporting = -1
あなたが見ることはありませんことをご読み込まれた設定ファイルの性を保証してWSODをかかわらず、構文などのランタイム変更前に発生パースエラーのini_set('display_errors', 1);
か、error_reporting(E_ALL);
場所を取ることができます。
(php.ini)ロードされた構成ファイルを見つける方法
ロードされた設定ファイルを見つけるには、次のコードだけで新しいPHPファイルを作成します...
<?php
phpinfo();
その後であなたがブラウザや外観を指してロードされた設定ファイルと解析された追加の.iniファイルあなたの一番上に通常ある、phpinfo()
そしてすべてのロードされたコンフィギュレーションファイルへの絶対パスが含まれます。
(none)
ファイルの代わりに表示される場合は、構成ファイル(php.ini)パスに php.iniがないことを意味します。したがって、PHPにバンドルされている標準のphp.iniをここからダウンロードし、php.iniとして構成ファイルのパスにコピーしてから、phpユーザーがそのファイルから読み取るための十分な権限を持っていることを確認してください。ロードするには、httpdまたはphp-fpmを再起動する必要があります。これは、PHPソースにバンドルされている開発用の php.iniファイルです。ですので、本番環境では使用しないでください!
本番環境ではこれを行わないでください
これは、開発中にWSODを回避するための最良の方法です。ここで行ったように、PHPスクリプトの上部ini_set('display_errors', 1);
またはerror_reporting(E_ALL);
上部に.htaccessを使用することを示唆している人は、ロードされた構成ファイルが(ここの場合のように)構文または解析エラーが発生したときにWSODを回避するのに役立ちませんたdisplay_errors
オフ。
多くの人々(およびPHPのdisplay_errors
標準的なインストール)は、デフォルトでオフになっているproduction-iniファイルを使用します。これにより、通常、ここで経験したのと同じ不満が生じます。PHPは起動時にすでにオフになっているため、構文エラーまたは解析エラーが発生し、何も出力されずにベイルされます。ini_set('display_errors',1);
PHPスクリプトの先頭でそれを回避する必要があると予想されますが、ランタイムに到達しないため、PHPがコードを解析できなくても問題ありません。