2009-07-29 23 views
15

デバッグ出力の改行をエスケープすることを許可または禁止するPHPの設定は何ですか?PHPエラーログと改行文字

2つの異なるインストール(MAMP/OSXを実行するdevラップトップと、debianを実行するdevサーバー)では、デバッグ時にエラーログに異なる結果が表示されます。 Debianでは

error_log(print_r(array(1,2,4),1)); 

これは

[30-Jul-2009 11:34:00] Array 
(
    [0] => 1 
    [1] => 2 
    [2] => 4 
) 
ように/アプリケーション/ MAMP /ログ/ php_error_log表示されますOSX上で

[Thu Jul 30 11:32:34 2009] [error] [client 118.93.246.104] Array\n(\n [0] => 1\n [1] => 2\n [2] => 4\n)\n, referer: http://dev.example.org/ 

としては/var/log/apache2/error.logに表示されます。

私はデバッグのためにMAMPの方が好きです(ログファイルを/ Applicationsディレクトリに再配置することは別として)。

ありがとうございます!

答えて

12

Chris Chrisさんは、Debianのphp.iniのerror_logディレクティブをファイルを指すように変更することができます。これが定義されていないと、複数の行をサポートしていないsyslogを経由します。

詳細:

error_log機能

error_logディレクティブ私はこのための素晴らしい解決策を考え出したし、ちょうどそれについてブログ

+0

Apacheが実行されているユーザが(permissionの問題により)指定されたerror_logファイルに書き込めない場合、syslogまたはApache logにも移動することにも注意してください。 – Pistos

-2

は、人々に役に立つかもしれません:http://www.drcoen.com/2012/05/php-error_log-and-newlines-a-solution/。 TL; DR:自分で/ tmpに作成したファイルに書き込み、デバッグ情報をそのファイルに書き込む関数を作成し、Apacheのログをそこにルーティングします(2つのエラーファイルを追跡する必要はありません)。

+0

ありがとうございます。 AFAICTこれは "/ tmpに新しいファイルを作成することによってアクセス許可の制限を回避する"ことができます。上記の@Pistosからのアクセス許可の手掛かりは、最後に私にとって欠けていた成分でした。 –

+0

リンクがダウンしていて、残念ながら詳細な説明が回答に含まれていません。 – Innovaat

+1

最新のリンクは、変更されたことを認識していませんでした:http://www.drcoen.com/2012/05/php-error_log-and-newlines-a-solution/ ダウン投票を得て、私ができなかった元の問題を解決できない場合に役立ちます(したがって回避策)。 – eclipse31

2

この問題は、Apacheプロセスがerror_logファイルに書き込めないために発生します。そのため、syslogはファイルに書き込みます。 syslogは改行を取り消します。

はそうちょうど行います

chmod 777 error.log 

これはあなたの問題を解決する必要があります。

+3

攻撃者が書き込みできるファイルにgo + xを設定することを心配します。代わりに、グループの読み取り/書き込みとグループの所有権をWebサーバーユーザーに設定します。ログのローテーション(ログの設定でのchmodの設定など)の設定が変更されてしまうことに注意してください。 –

+0

これはやや安全ではないと同意します(しかし、あなたのログファイルはWebサーバーからアクセスできないことを願っています)。しかし、ローカルの開発環境では素早く素早く、重要な問題を指摘しています。ログファイルによってApacheが書き込むのを防ぐことができ、代わりにsyslogを使用することができます。 –

+1

自分の解決策はChris Burgessの推薦に近いものでした。私はWebサーバーを実行するグ​​ループに自分のユーザーを追加し、グループのフルアクセスを許可するようにファイルのアクセス許可を変更し、Webサーバーが実行するユーザー/グループにファイルの所有権を変更しましたすなわち、あらかじめインストールされたApacheを持つOSX上で: '' 'sudo dseditgroup -o edit -a myusername -t user _www; sudo chown _www:_www/var/log/apache2/error_log; sudo chmod 770/var/log/apache2/error_log; '' ' –