PHP错误日志和换行符

What's the PHP config setting which allows or prevents newlines in debug output from being escaped?

On two different installs (a dev laptop running MAMP/OSX, and a dev server running debian) I see different results in the error logs when debugging.

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

On Debian this appears in /var/log/apache2/error.log as

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

On OSX this appears in /Applications/MAMP/logs/php_error_log as

[30-Jul-2009 11:34:00] Array
(
    [0] => 1
    [1] => 2
    [2] => 4
)

I prefer the MAMP way for debugging (apart from relocating logfiles to the /Applications directory).

Thanks!

Chris, you should be able to change the error_log directive in your php.ini on Debian to point to a file. If this is undefined, it will go through syslog which doesn't support multiple lines.

Details:

error_log function

error_log directive

I came up with a nice solution for this and just blogged about it, might be helpful to people: http://www.drcoen.com/2012/05/php-error_log-and-newlines-a-solution/ . TL;DR: write to a file you create yourself in /tmp, write a function that writes your debug info to that file and route Apache's logging there too (so you don't have to track 2 error files).

The problem is caused when the Apache process can't write into the error_log file, so the syslog writes into the file instead. The syslog messes up the line breaks.

So just do:

chmod 777 error.log

This should solve your problem.