php.ini配置错误

问题描述:

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

echo ini_get('error_log'); 

值是在命令行上一样,因为它是在浏览器中。 什么ini设置在这里配置错误?这很烦人,因为错误记录不仅仅是错误的。它影响了我的include路径,以及:/

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

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

甲基苯丙胺使用它自己的Apache服务器,它通过对端口的默认运行8080你可能想转关闭系统偏好设置 - >共享中的Apache服务器。

另外,尝试运行包含PHP文件:

<?php phpinfo(); ?> 

这会告诉你哪个php.ini文件实际上是由Apache的阅读。

你想完成什么?在apache中,stderr进入error_log ... error_log()function documentation指出,默认情况下它会记录到服务器的错误日志。如果要登录到其他目标,请使用参数message_typedestination

这里相关的ini设置是display_errors

从命令行的值On将转储错误到STDOUT; stderr将转移他们到STDERR和Off将压制他们。对于Apache,只有OnOff有意义。

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

error_log指令告诉PHP在哪里记录错误,但它也要求log_errors设置为On,否则它没有效果。 (再一次,/ private/etc中的ini文件可能有log_errors = Off。)

错误日志显示在控制台中,而不是在日志文件中的原因可能是因为权限问题 - 我并不真正了解MacOS,但因为它是基于UNIX的,所以我猜测:

  • Apache所使用的日志文件属于一个特定的用户
  • 运行时从控制台的脚本,你是不是该用户,你没有写访问日志文件

如果它不能登录到日志文件,我想这个error_log正在写入到错误标准输出(stderr),这通常是控制台。


This comment手册页面上似乎表明,这可能是你的问题的原因(引用):

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


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

log_errors布尔

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

和:

的display_errors

这确定是否错误应该 打印到屏幕的 输出部分或者如果它们应该从被隐藏 用户。

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