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_type
和destination
。
这里相关的ini设置是display_errors
。
从命令行的值On
将转储错误到STDOUT
; stderr
将转移他们到STDERR和Off
将压制他们。对于Apache,只有On
和Off
有意义。
可能性是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_errors
和display_errors
在CLI中使用的php.ini文件是否正确配置:
log_errors布尔
告知是否脚本错误消息应该将 记录到服务器的错误 日志或error_log。这个选项因此是 服务器特定的。
和:
的display_errors串
这确定是否错误应该 打印到屏幕的 输出部分或者如果它们应该从被隐藏 用户。
值“stderr”将错误发送到 stderr而不是stdout。