PHP CLI 不会记录错误
PHP 当前不会记录从命令行生成的错误。
我有:
log_errors = On
error_log = /var/log/php_errors.log
在文件 /etc/php5/cli/php.ini.
我是否缺少进一步的设置来使其正常工作?
PHP 当前不会记录从命令行生成的错误。
我有:
log_errors = On
error_log = /var/log/php_errors.log
在文件 /etc/php5/cli/php.ini.
我是否缺少进一步的设置来使其正常工作?
请检查运行 PHP CLI 的用户帐户是否具有 对 的写入权限。/var/log/php_errors.log
此外,您可以验证您使用的是正确的 php.ini 文件,如下所示:
php -a -c /etc/php5/cli/php.ini
在Ubuntu 12.04(精确穿山甲)环境中设置PHP CLI日志记录时,这个问答线程对我非常有用,所以我想发布一个提炼我学到的知识的答案。除了David Chan和George Cummins提供的重要信息外,我还创建了一个脚本来确保PHP CLI错误日志不会失控,并设置了这个脚本,以便多个用户能够将错误记录到常见的PHP CLI错误日志中。logrotate.d
首先,PHP CLI 的默认行为是将错误消息记录到标准输出;记录到文件不是默认行为。这通常意味着登录到运行 PHP CLI 命令的同一命令行终端会话。虽然PHP ini文件确实具有指定的附加调整,但需要进行适当的调整才能真正使其正常工作。error_log
首先,我必须创建一个初始文件:php_errors.log
sudo touch /var/log/php_errors.log
由于有问题的服务器是由从事各种项目的Web开发人员使用的,因此我为他们建立了一个名为.在这种情况下,我希望通过我更改文件的所有权来读取和可写,如下所示:www-users
php_errors.log
www-users
sudo chown root:www-users /var/log/php_errors.log
然后将文件的权限更改为:
sudo chmod 664 /var/log/php_errors.log
是的,从安全的角度来看,让任何人都可以读取和写入的日志文件并不是那么好。但这是一个受控的共享工作环境。所以我相信用户会尊重这样的事情。此外,当PHP从CLI运行时,任何可以做到这一点的用户都需要对日志的写入权限才能写入日志。www-users
接下来,进入以调整默认的Ubuntu 12.04设置以匹配此新日志文件:/etc/php5/cli/php.ini
sudo nano /etc/php5/cli/php.ini
在 Ubuntu 12.04 中,“愉快”默认启用:log_errors
log_errors = On
但是要允许记录到文件,我们需要更改 以匹配新文件,如下所示:error_log
error_log = /var/log/php_errors.log
logrotate.d
现在应该就是这样了,但是由于我不希望日志失控,因此我为.创建一个调用的文件,如下所示:logrotate.d
php_errors.log
php-cli
/etc/logrotate.d/
sudo nano /etc/logrotate.d/php-cli
并将此日志旋转守护程序脚本的内容放在那里:
/var/log/php_errors.log {
weekly
missingok
rotate 13
compress
delaycompress
copytruncate
notifempty
create 664 root www-users
sharedscripts
}
完成此操作后,让我们使用David Chan的提示测试设置:
php -r "error_log('This is an error test that we hope works.');"
如果运行正确,您应该只是被退回到一个空的命令提示符,因为PHP CLI错误不再发送到标准输出。因此,请检查测试错误消息的实际情况,如下所示:php_errors.log
tail -n 10 /var/log/php_errors.log
那里应该有一个带时间戳的错误行,看起来像这样:
[23-Jul-2014 16:04:56 UTC] This is an error test that we hope works.