PHP错误日志和换行符

PHP错误日志和换行符,php,apache,debugging,Php,Apache,Debugging,什么是PHP配置设置,允许或防止调试输出中的换行符被转义 在两个不同的安装(一个运行MAMP/OSX的dev膝上型计算机和一个运行debian的dev服务器)上,我在调试时的错误日志中看到了不同的结果 error_log(print_r(array(1,2,4),1)); 在Debian上,它显示在/var/log/apache2/error.log中 [Thu Jul 30 11:32:34 2009] [error] [client 118.93.246.104] Array\n(\n

什么是PHP配置设置,允许或防止调试输出中的换行符被转义

在两个不同的安装(一个运行MAMP/OSX的dev膝上型计算机和一个运行debian的dev服务器)上,我在调试时的错误日志中看到了不同的结果

error_log(print_r(array(1,2,4),1));
在Debian上,它显示在/var/log/apache2/error.log中

[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/
在OSX上,它显示在/Applications/MAMP/logs/php\u error\u log中

[30-Jul-2009 11:34:00] Array
(
    [0] => 1
    [1] => 2
    [2] => 4
)
我更喜欢使用MAMP方式进行调试(除了将日志文件重新定位到/Applications目录之外)


谢谢

Chris,您应该能够更改Debian上php.ini中的error_log指令以指向文件。如果未定义,它将通过不支持多行的syslog

详情:

作用


指令

当Apache进程无法写入错误日志文件时,会导致该问题,因此系统日志会写入该文件。系统日志搞乱了换行符

所以,只要做:

chmod 777 error.log

这应该可以解决您的问题。

还应该提到,如果Apache运行的用户无法写入指定的错误日志文件(由于权限问题),它还将转到syslog或Apache log。请注意在攻击者可以写入的文件上设置go+x。改为将组读/写和组所有权设置为Web服务器用户。注意在日志轮换时权限更改未设置(logrotate config中的chmod设置等)。同意这有点不安全(尽管我希望您的日志文件不能通过web服务器访问…),但这对于本地开发环境来说是一个很好的快捷方式,并指出了关键问题,也就是说,日志文件的权限会阻止Apache向其写入,从而导致使用syslog。我自己的解决方案更像Chris Burgess的建议,我将我的用户添加到Web服务器运行的组中,更改文件的权限以允许对组的完全访问,并将文件的所有权更改为Web服务器运行时的用户/组,即在OSX上预装Apache:
sudo dseditgroup-o edit-a myusername-t user\u www;sudo chown www:_www/var/log/apache2/error\u log;sudo chmod 770/var/log/apache2/error_log
无法运行:运行Ubuntu16.04、Apache2作为
www-data
(用户和组)、vhost-config带有
ErrorLog${APACHE\u-LOG\u-DIR}/myapp.error.LOG
、带有755的
/var/www/Apache2
、以及
myapp.error.LOG
www-data
用户(和组)拥有。顶部权限testwise在该文件上设置为777。Apache重新启动。仍在该文件中转储
\n
。我遗漏了什么,有什么想法吗?