web-dev-qa-db-ja.com

PHPが非推奨のエラーをApacheエラーログに書き込む

Debian LennyからSqueezeにアップグレードしたところ、/ var/log/Apache2/errors.logに次のエラーが発生していることがわかりました。

<b>Warning</b>:  Directive 'magic_quotes_gpc' is deprecated in PHP 5.3 and greater in <b>Unknown</b> on line <b>0</b><br />
<br />
<b>Warning</b>:  Directive 'register_globals' is deprecated in PHP 5.3 and greater in <b>Unknown</b> on line <b>0</b><br />

これはシステムログであり、php(Apache経由)がhtmlコードをそこに書き込もうとしているので、これは奇妙なことに気づきました。これは、サーバー(仮想ホストを含​​む)のすべてのページロードで発生するようです。

これらの値をオフに設定することは、現時点ではオプションではありません(私はメンテナンスされていないコードベースを実行しています)。私のphp.iniには、特に次のものが含まれています。

error_reporting  = E_ALL & ~E_NOTICE & ~E_DEPRECATED
display_errors = On
register_globals = On
magic_quotes_gpc = On

これがphp configまたはApache configのエラーかどうかはわかりません。すべてのページロードでこれらのメッセージがerrors.logに書き込まれるのを回避する方法を誰かが知っていますか?

  • PHP:バージョン5.3.2-2 Apache:
  • Apache/2.2.16(Debian)

ありがとう、Gardar

7
gardarh

他の回答はここにありますwillエラーログに書き込まれるエラーを停止しますが、それらは単にエラーメッセージerror

この場合のエラーは、php.iniのどこかにmagic_quotes_gpc onまたはmagic_quotes_gpc offがまだ含まれていることです。 register_globals onまたはregister_globals offについても同様です。

エラーは、ディレクティブがオンまたはオフであることではありません。エラーは、ディレクティブがまったく存在してはならないということです。これらの行をphp.iniからコメント化するか、完全に削除してください。PHPを使用すると、廃止されたディレクティブに関するエラーの書き込みが停止します。

もちろん、これらのいずれかをオンにする必要がある場合、アプリケーションで問題が発生する可能性があります。

これがPHP 5.3のエラーである理由は、PHP 6ではこれらのディレクティブが存在せず、PHP 6が設定されているかのように動作するためです。オフに。 PHP 6へのアップグレードを計画している場合は、今がアプリケーションのアップグレードまたは置き換えを開始する良い機会です。

もう1つの解決策は、PHPを5.2または5.1ブランチにダウングレードすることです。

PHPがApacheのログにエラーを書き込む場合、PHPがApacheモジュールとして実行されているため、これは自然なことです。 error_log = /var/log/php_errors.logのようなものをphp.iniに挿入してApacheを再起動すると、PHPエラーをApacheエラーから分離できます。そこにいる間、display_errorsoffに変更することをお勧めします。エラーメッセージには、攻撃者に見られたくない機密情報が含まれていることがよくあります。ほとんどの場合、php.iniに次のように記述されています。

; - display_errors = Off           [Security]
;     With this directive set to off, errors that occur during the execution of
;     scripts will no longer be displayed as a part of the script output, and thus,
;     will no longer be exposed to remote users.  With some errors, the error message
;     content may expose information about your script, web server, or database
;     server that may be exploitable for hacking.  Production sites should have this
;     directive set to off.

エラーメッセージにHTMLが含まれている理由はありません。

質問しなかった別の質問に答えるために、PHPがin <b>Unknown</b> on line <b>0</b>であると報告する理由は、エラーメッセージがPHPのコード行用に設計されているためです書き込まれましたが、見つかったエラーは、1行のコードを読み取る前、または.phpファイルを開く前にphp.iniを解析するときに発生しました。ファイルを開いておらず、行番号もないため、「不明」と「0」と報告します。

9
Ladadadada

〜E_DEPRECATEDを削除

タダム:)

0
Danny

この動作は、display_errors = Offに設定することで回避できます。私はこの解決策に完全に満足していません。html形式のエラーをログファイルに書き込むのは奇妙に思えます。誰かがこの動作を理解しているなら教えてください:)

0
gardarh