PHP / Apache error.log不执行new_line字符,为什么?

时间:2011-12-14 11:47:31

标签: php apache ubuntu error-handling

例如,而不是获得以下

post:Array (
  "a" => "b",
  "c" => "d"
)

我得到这个:

post:Array (\n  "a" => "b",\n  "c" => "d"\n)

在调试代码时阅读本文真的很不舒服。因此,如果您对为何无法正常工作有任何建议,请告诉我。

我在连接到Ubuntu虚拟服务器的Windows7 Putty中运行它,据说它运行默认的Apache / PHP配置。 (可能不是,但一如既往,团队中没有人记得改变了什么)

编辑:有人请求写入error.log的代码:

<?php
error_log(print_r(array("a"=>"b","c"=>"d"),1));
?>

查看错误日志的命令是:

sudo tail -f /var/log/apache2/error.log
sudo vim /var/log/apache2/error.log
sudo cat /var/log/apache2/error.log

在所有情况下都会出现\n未按预期执行的问题。

5 个答案:

答案 0 :(得分:8)

我也面临同样的问题,但花了几分钟后我得到了一个解决方案。

当您tail使用如下

sudo tail -f /var/log/apache2/error.log | sed -e 's/\\n/\n/g'

如果您需要可以创建文件,请为其命名并粘贴上述命令并将其放在/usr/bin/文件夹

例如

vi tailme

内容:

#!/bin/bash
tail -f /var/log/apache2/error.log | sed -ue 's/\\n/\n/g'

并将其放在/usr/bin/中,现在您可以使用tailme作为命令。

答案 1 :(得分:1)

在某些情况下(例如Mac),使用perl可能会更好:

tail -100f /var/log/apache2/error.log | perl -pe 's/\\n/\n/g'

答案 2 :(得分:1)

该问题是由于Apache进程无法写入error_log文件而导致的,因此syslog会将其写入文件。 syslog弄乱了换行符。

那就这样做吧

chmod 777 error.log

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

答案 3 :(得分:0)

如果您正在浏览器中查看输出,请尝试使用<pre>标记包装输出语句。

<?php
$post = Array("a" => "b", "c" => "d");
echo "<pre>";
print_r($post);
echo "</pre>";
?>

向浏览器输出格式化数组

Array
(
    [a] => b
    [c] => d
)

答案 4 :(得分:0)

调用 error_log 时,您可以强制 php 直接登录,而不是将其传递给 apache,这是默认行为。为此,只需指定 3 作为第二个参数,指定文件路径作为第三个参数。

error_log("error message", 3, $logFileLocation);

有关详细信息,请查看 PHP error_log docs