1

問題をある程度絞り込みました。コマンドラインから実行する"error_log('hey');"と、STDOUT にダンプされます。しかし、Web インターフェイス (Apache) から同じコードを実行すると、エラー ログにエラーが記録されます。Apacheが使用しているものと/private/etcにあるもの(MAMPを実行しているMacを使用しています)の両方のiniファイルを確認しました。どちらの error_log 変数もまったく同じ場所を指しています。そして、私が走るとき

echo ini_get('error_log');

コマンド ラインの値は、ブラウザーの値と同じです。ここでどの ini 設定が誤って構成されていますか? エラーログが壊れているだけでなく、これは非常に面倒です。インクルードパスにも影響しています:/

4

4 に答える 4

1

何を達成しようとしていますか?apache 内では、stderr はerror_log...error_log() 関数のドキュメントには、デフォルトでサーバーのエラー ログに記録されると記載されています。別の宛先にログを記録する場合は、パラメーターmessage_typedestinationパラメーターを使用します。

于 2009-08-31T21:08:38.370 に答える
0

おそらく、次の構成ファイルを編集する必要があります。

/Applications/MAMP/conf/php5/php.ini

MAMP は、デフォルトでポート 8080 で実行される独自の Apache サーバーを使用します。おそらく、[システム環境設定] -> [共有] で Apache サーバーをオフにすることをお勧めします。

また、以下を含む PHP ファイルを実行してみてください。

<?php phpinfo(); ?>

これにより、どの php.ini が実際に Apache によって読み取られているかがわかります。

意思

于 2009-08-31T20:33:22.997 に答える
0

ログ ファイルではなくコンソールに error_log が表示される理由は、パーミッションの問題が原因である可能性があります。

  • Apache が使用するログ ファイルが特定のユーザーに属している
  • コンソールからスクリプトを実行する場合、あなたはそのユーザーではなく、ログ ファイルへの書き込みアクセス権がありません。

ログファイルにログを記録できない場合、error_log がエラーの標準出力 (stderr) (通常はコンソール) に書き込まれていると思います。


マニュアルのページのこのコメントは、これが問題の原因である可能性があることを示しているようです (引用):

ログファイルに書き込めない場合、PHP は stderr にログを記録するようです。コマンド ライン PHP は stderr にフォールバックします。これは、ログ ファイルが (通常) Web サーバーによってのみ書き込み可能であるためです。


また、CLI で使用される php.ini ファイルでlog_errorsとが適切に構成されていることを確認します。display_errors

log_errors ブール値

スクリプト エラー メッセージをサーバーのエラー ログまたは error_log に記録するかどうかを指定します。したがって、このオプションはサーバー固有です。

と :

display_errors 文字列

これは、エラーを出力の一部として画面に出力するか、ユーザーから非表示にするかを決定します。

値「stderr」は、エラーを stdout ではなく stderr に送信します。

于 2009-08-31T21:12:07.240 に答える
0

ここで関連する ini 設定はdisplay_errors.

コマンド ラインから値をOn指定すると、エラーが にダンプされSTDOUTます。stderrそれらをSTDERRに転送し、それらOffを抑制します。Apache専用OnOff、意味があります。

おそらく、Apache の ini ファイルにdisplay_errors = Offdisplay_errors = On.

このディレクティブは PHP にエラーを記録する場所を指示しますが、に設定するerror_log必要もあります。そうしないと効果がありません。(繰り返しますが、/private/etc の ini ファイルに . がある可能性があります。)log_errorsOnlog_errors = Off

于 2009-08-31T21:09:48.057 に答える