【问题标题】:PHP error_log outputting line breaks as literal "\n" strings on Mac OSXPHP error_log 在 Mac OSX 上将换行符输出为文字“\n”字符串
【发布时间】:2012-01-09 06:52:15
【问题描述】:

我正在编写一些使用error_log() 进行调试的代码。问题是由于某种原因,输出中的所有换行符都显示为文字 \n 字符串,因此没有实际的换行符(这使得理解复杂数组几乎不可能)。
我尝试将var_exportprint_rerror_log 函数一起使用,并且都导致了相同的结果:带有\n 的文本块分散在各处。我什至尝试过将str_replace \nPHP_EOL 都没有成功。我做错了什么?

澄清一下:\n 字符串出现在控制台错误日志查看器、TextEdit 和终端中。

编辑

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

【问题讨论】:

    标签: php macos terminal


    【解决方案1】:

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

    Linux

    $ tail -f error_log | sed "s/\\\n/\\n/g"
    

    Mac OS X

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

    注意:在 Mac OS X 中,行尾是 CRLF(回车换行),而在 LINUX 系统中则只有 LF(换行)

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

    【讨论】:

    • 什么 OSX 版本。小牛队?
    • 对于像我这样的其他懒人:不要只是复制和粘贴 Mac OS X 命令。您必须实际输入它,至少是注释 2 中解释的 ^M^L 部分。谢谢 8y5,很好的解决方案!
    • 有没有办法把它保存为别名?
    【解决方案2】:

    显然,此问题与您的操作系统无关。看到这个问题:PHP error log and newline chars

    ...您应该能够将 Debian 上的 php.ini 中的 error_log 指令更改为指向文件。如果这是未定义的,它将通过不支持多行的系统日志。

    【讨论】:

    • 还要注意,Apache 要将换行符写入 error.log,需要写入权限才能这样做(否则 syslog 最终会写入 error.log)。如果您想为 Apache 的错误保留 syslog 格式(我的偏好),则 Perms 修复或新文件“php-errors.log”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-29
    • 1970-01-01
    相关资源
    最近更新 更多