1

我已经把我的问题缩小了一些。当我从命令行运行"error_log('hey');"时,它转储到 STDOUT。但是,如果我从我的 Web 界面 (Apache) 运行相同的代码,它会将错误放入错误日志中。我检查了两个 ini 文件,一个 Apache 正在使用,一个在 /private/etc 中(我在运行 MAMP 的 Mac 上)。两个 error_log 变量都指向完全相同的位置。当我跑步时

echo ini_get('error_log');

命令行上的值与浏览器中的值相同。什么 ini 设置在这里配置错误?这很烦人,因为不仅仅是错误记录被破坏了。它也影响了我的包含路径:/

4

4 回答 4

1

你想达到什么目的?在 apache 中,stderr 进入error_log...error_log() 函数文档指出,默认情况下它会记录到服务器的错误日志中。如果要登录到不同的目的地,请使用message_typedestination参数。

于 2009-08-31T21:08:38.370 回答
0

您可能需要编辑以下配置文件:

/Applications/MAMP/conf/php5/php.ini

MAMP 使用它自己的 Apache 服务器,默认情况下在端口 8080 上运行。您可能希望在系统偏好设置 -> 共享中关闭 Apache 服务器。

此外,尝试运行包含以下内容的 PHP 文件:

<?php phpinfo(); ?>

这将告诉您 Apache 实际上正在读取哪个 php.ini。

将要

于 2009-08-31T20:33:22.997 回答
0

这里相关的 ini 设置是display_errors.

在命令行中, 的值On会将错误转储到STDOUT; stderr会将它们转移到 STDERR 并Off抑制它们。仅适用于 ApacheOn并且Off有意义。

可能性是 Apache 的 ini 文件有display_errors = Off,而 /private/etc 中的 ini 文件有display_errors = On.

error_log指令告诉 PHP 将错误记录到哪里,但它也需要log_errors设置为On,否则无效。(同样,/private/etc 中的 ini 文件很可能有log_errors = Off。)

于 2009-08-31T21:09:48.057 回答
0

error_log 显示在控制台而不是日志文件中的原因可能是因为权限问题——我不太了解 MacOS,但由于它是基于 UNIX 的,我猜想:

  • Apache使用的日志文件属于特定用户
  • 从控制台运行脚本时,您不是该用户,并且您没有对日志文件的写入权限

如果它无法记录到日志文件,我想error_log正在写入错误的标准输出(stderr),通常是控制台。


手册页面上的此评论似乎表明这可能是您的问题的原因(引用):

如果 PHP 无法写入日志文件,它似乎会记录到 stderr。命令行 PHP 回退到 stderr,因为日志文件(通常)只能由网络服务器写入。


此外,请确保log_errorsdisplay_errors在 CLI 中使用的 php.ini 文件中正确配置:

log_errors 布尔值

告知是否应将脚本错误消息记录到服务器的错误日志或 error_log。因此,此选项是特定于服务器的。

和 :

display_errors 字符串

这决定了错误是否应该作为输出的一部分打印到屏幕上,或者是否应该对用户隐藏。

值“stderr”将错误发送到 stderr 而不是 stdout。

于 2009-08-31T21:12:07.240 回答