PHP error_log在Mac OSX上输出换行符作为文字"\n"字符串

Mat*_*ond 16 php macos terminal

我正在研究一些error_log()用于调试的代码.问题在于,由于某种原因,输出中的所有换行符都显示为文字\n字符串,因此没有实际的换行符(这使得它几乎不可能理解复杂的数组).
我尝试使用两者var_exportprint_r使用该error_log函数,两者都导致了相同的结果:一个\n分散的文本块.我甚至想这样做str_replace \nPHP_EOL没有成功.我究竟做错了什么?

为了澄清:\n字符串出现在Console错误日志查看器,TextEdit和终端中.

编辑

只是想提前注意是的,我知道你需要双引号\n字符串才能显示为换行符.但是,我正在处理来自print_rvar_export(检查数组)的输出,所以这对我没有帮助(我想?).

eig*_*ive 35

作为替代方案,您可以处理/替换'\n'通过sed,因此它们在控制台中显示为新行:

Linux的

$ tail -f error_log | sed "s/\\\n/\\n/g"
Run Code Online (Sandbox Code Playgroud)

Mac OS X.

# WARNING - don't just copy+paste (see comment below)
$ tail -f error_log | sed "s/\\\n/^M^L/g"
Run Code Online (Sandbox Code Playgroud)

注意:在Mac OS X中,CRLF当在LINUX系统中时,行的末尾是(回车换行)(仅换行LF)

注2:在Mac OS X中输出^M终端,按Control+V Control+M,输出^L,按Control+V Control+L

  • 对于像我这样的其他懒人:不要只复制并粘贴Mac OS X命令.你必须实际输入它,至少是^ ^ M ^ L`部分,如注2所述.谢谢8y5,很好的解决方案! (5认同)
  • 有没有办法将其保存为别名? (2认同)

Yes*_*rry 7

显然,此问题与您的操作系统无关.看到这个问题:PHP错误日志和换行符

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

  • 还要注意,Apache要向error.log写入换行符,则需要具有写权限(否则syslog最终将写入error.log)。如果要为Apache的错误保留syslog格式(我的偏爱),请使用Perms修复程序或新文件'php-errors.log'。 (2认同)