首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >PHP CLI不会记录错误

PHP CLI不会记录错误
EN

Stack Overflow用户
提问于 2011-06-17 22:44:13
回答 5查看 90.4K关注 0票数 48

PHP目前不会记录从命令行产生的错误。

我有:

代码语言:javascript
复制
log_errors = On
error_log = /var/log/php_errors.log

在文件/etc/php5/cli/php.ini中。

我是否遗漏了进一步的设置来使其正常工作?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-06-17 22:46:04

请检查运行PHP CLI的用户帐户是否具有对/var/log/php_errors.log的写入权限。

此外,您可以验证是否使用了正确的php.ini文件,如下所示:

代码语言:javascript
复制
php -a -c /etc/php5/cli/php.ini
票数 48
EN

Stack Overflow用户

发布于 2014-07-24 01:01:48

当在Ubuntu 12.04 (精确穿山甲)环境中设置PHP CLI日志时,这个问答线程对我非常有帮助,所以我想发布一个提炼我所学知识的答案。除了大量的信息provided by David Chan以及as George Cummins之外,我还创建了一个logrotate.d脚本来确保PHP错误日志不会失控,并对其进行了设置,以便多个用户能够将错误记录到公共的PHP错误日志中。

首先,PHP CLI的默认行为是将错误消息记录到标准输出;记录到文件不是默认行为。这通常意味着登录到运行PHP CLI命令的同一命令行终端会话。虽然PHP文件确实有针对指定error_log的调整,但需要进行额外的调整才能真正使其正常工作。

首先,我必须创建一个初始的php_errors.log文件:

代码语言:javascript
复制
sudo touch /var/log/php_errors.log

由于有问题的服务器是由从事各种项目的web开发人员使用的,因此我为他们建立了一个名为www-users的公共组。在本例中,我希望www-users可以读写php_errors.log,我像这样更改了文件的所有权:

代码语言:javascript
复制
sudo chown root:www-users /var/log/php_errors.log

然后将该文件的权限更改为:

代码语言:javascript
复制
sudo chmod 664 /var/log/php_errors.log

是的,从安全的角度来看,在www-users中拥有一个任何人都可以读写的日志文件并不是很好。但这是一个受控的共享工作环境。所以我相信用户会尊重这样的东西。此外,当PHP从CLI运行时,任何可以执行此操作的用户都将需要对日志进行写访问,甚至需要写入日志。

接下来,进入/etc/php5/cli/php.ini来调整默认的Ubuntu12.04设置,以匹配这个新的日志文件:

代码语言:javascript
复制
sudo nano /etc/php5/cli/php.ini

幸运的是,log_errors在Ubuntu12.04中是默认启用的:

代码语言:javascript
复制
log_errors = On

但是,为了允许记录到文件,我们需要更改error_log以匹配新文件,如下所示:

代码语言:javascript
复制
error_log = /var/log/php_errors.log

设置logrotate.d脚本。

现在应该就是这样了,但是因为我不想让日志失控,所以我为php_errors.log设置了一个logrotate.d。在/etc/logrotate.d/中创建一个名为php-cli的文件,如下所示:

代码语言:javascript
复制
sudo nano /etc/logrotate.d/php-cli

并将此日志旋转守护程序脚本的内容放在其中:

代码语言:javascript
复制
/var/log/php_errors.log {
        weekly
        missingok
        rotate 13
        compress
        delaycompress
        copytruncate
        notifempty
        create 664 root www-users
        sharedscripts
}

测试设置。

完成后,让我们使用David Chan’s tip测试设置

代码语言:javascript
复制
php -r "error_log('This is an error test that we hope works.');"

如果运行正确,您应该会返回到一个空的命令提示符,因为PHP CLI错误不再发送到标准输出。因此,请检查测试错误消息的实际php_errors.log,如下所示:

代码语言:javascript
复制
tail -n 10 /var/log/php_errors.log

其中应该有一个带时间戳的错误行,如下所示:

代码语言:javascript
复制
[23-Jul-2014 16:04:56 UTC] This is an error test that we hope works.
票数 43
EN

Stack Overflow用户

发布于 2013-11-09 03:41:47

作为诊断,您可以尝试以这种方式强制写入错误日志:

代码语言:javascript
复制
php -c /etc/php5/cli/php.ini -r " error_log('test 123'); "

现在,您应该在日志中看到测试123:

代码语言:javascript
复制
tail /var/log/php_errors.log
票数 17
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6387542

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档