非推奨の機能を利用する商用ソフトウェアを実行している本番サーバーがあります。 php.ini-display_errors = Off
-のエラー出力はすでに無効になっているため、ユーザーにはこれらのエラーは表示されません。ただし、問題を追跡するために、PHPエラー-log_errors = On
-を記録しています。
問題:PHPは、最終的にエラーログに渡される内容に関してerror_reporting
ディレクティブを無視するようです。どのような値の組み合わせを入力しても、ファイルロギングはあたかも私はE_ALL
に設定されています。その結果、エラーログが非推奨の通知で肥大化します。
デフォルトのタイムゾーン値はphp.iniで設定されているため、タイムゾーン関連の問題は関係ありません。
ソフトウェアパッケージのアップグレードはまだ利用できないため、「非推奨のコードを修正する」ための推奨事項はありません。 PHPがファイルのログを完全に無効にすることなく、廃止されたエラーをログにダンプしないようにする方法を具体的に探しています。
サーバーの詳細:
PHPがApacheモジュールとして実行される場合、Apache構成ファイルのディレクティブを使用して、_php.ini
_で利用可能な構成設定にアクセス/変更できます。これらのディレクティブは...
php_value
_php_flag
_php_admin_value
_php_admin_flag
__php_*
_バージョンと_php_admin_*
_バージョンの違いがこの問題の鍵です。 _php_admin_value
_および_php_admin_flag
_を使用して設定された値は、ApacheグローバルおよびVirtualHost構成でのみ設定できます。それらは.htaccessやini.set()で上書きできません。
error_reporting()
関数はini_set()
呼び出しと同等であり、同じ規則に従います。
それで、私は問題のサイトの仮想ホスト構成に入り、次の行を追加しました...
_php_admin_value error_reporting 22527
php_admin_value error_log /custom/log/path/php_errors.log
php_admin_flag log_errors On
php_admin_flag display_errors Off
_
最初の行は_error_reporting = E_ALL & ~E_DEPRECATED
_のビットごとの値です。簡単なスクリプトを作成して、この値を取得しました。
_ini_set("error_reporting", E_ALL & ~E_DEPRECATED);
echo ini_get("error_reporting");
_
非推奨アラートとともにシステム通知を無視したい場合-_error_reporting = E_ALL & ~E_DEPRECATED & ~E_NOTICE
_-ビット値は_22519
_です。
2行目は、すべてのPHPエラーをカスタムログに送信します。デフォルトでは、PHPはsyslog
値を使用します。通常は_/var/log/Apache2/error.log
_または似たようなもの。
3行目は、ファイルのロギングを有効にします。
最後の1つは、ページ上のエラー表示をオフにします。
ここでも、操作の優先順位と順序が重要です。これらの値は、_php.ini
_で定義された値よりも優先されます。同時に、アプリケーション内または_.htaccess
_ファイルでの他の変更によって上書きすることはできません。
Php.ini外の設定値を変更する方法の詳細については、 PHPのドキュメント を参照してください。
ソフトウェア自体がエラーレベルを設定している可能性があるため、php.ini
の設定を上書きしています。
これが本当なら、あなたはSOLです。
ちなみに、Cactiを使用している場合は、 ここ を参照してください。 Cactiを使用していない場合でも、シナリオをかなり要約すると思います。