web-dev-qa-db-ja.com

PHPエラーログでE_DEPRECATEDを無効にする

非推奨の機能を利用する商用ソフトウェアを実行している本番サーバーがあります。 php.ini-display_errors = Off-のエラー出力はすでに無効になっているため、ユーザーにはこれらのエラーは表示されません。ただし、問題を追跡するために、PHPエラー-log_errors = On-を記録しています。

問題:PHPは、最終的にエラーログに渡される内容に関してerror_reportingディレクティブを無視するようです。どのような値の組み合わせを入力しても、ファイルロギングはあたかも私はE_ALLに設定されています。その結果、エラーログが非推奨の通知で肥大化します。

デフォルトのタイムゾーン値はphp.iniで設定されているため、タイムゾーン関連の問題は関係ありません。

ソフトウェアパッケージのアップグレードはまだ利用できないため、「非推奨のコードを修正する」ための推奨事項はありません。 PHPがファイルのログを完全に無効にすることなく、廃止されたエラーをログにダンプしないようにする方法を具体的に探しています。

サーバーの詳細:

  • Ubuntu 10.04.2 LTS
  • PHP 5.3.2
14
Frank Koehl

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
_
  1. 最初の行は_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. 2行目は、すべてのPHPエラーをカスタムログに送信します。デフォルトでは、PHPはsyslog値を使用します。通常は_/var/log/Apache2/error.log_または似たようなもの。

  3. 3行目は、ファイルのロギングを有効にします。

  4. 最後の1つは、ページ上のエラー表示をオフにします。

ここでも、操作の優先順位と順序が重要です。これらの値は、_php.ini_で定義された値よりも優先されます。同時に、アプリケーション内または_.htaccess_ファイルでの他の変更によって上書きすることはできません。

Php.ini外の設定値を変更する方法の詳細については、 PHPのドキュメント を参照してください。

24
Frank Koehl

ソフトウェア自体がエラーレベルを設定している可能性があるため、php.iniの設定を上書きしています。

これが本当なら、あなたはSOLです。


ちなみに、Cactiを使用している場合は、 ここ を参照してください。 Cactiを使用していない場合でも、シナリオをかなり要約すると思います。