我有一个PHP脚本通过Apache运行得很好但是在cli中运行时失败了,所以我想知道发生了什么。为此,我想看到错误日志,但我设置的cli错误日志不起作用。我已经在正确的php.ini文件中设置了这个,当我通过命令行获取错误日志详细信息时确认:
$ php -i | grep error
display_errors => Off => Off
display_startup_errors => Off => Off
error_append_string => no value => no value
error_log => /var/log/php_error_log => /var/log/php_error_log
error_prepend_string => <font color=ff0000> => <font color=ff0000>
error_reporting => 30711 => 30711
html_errors => Off => Off
ignore_repeated_errors => Off => Off
log_errors => On => On
log_errors_max_len => 1024 => 1024
track_errors => Off => Off
xmlrpc_error_number => 0 => 0
xmlrpc_errors => Off => Off
suhosin.disable.display_errors => Off => Off
suhosin.sql.bailout_on_error => Off => Off
因此error_log
和log_errors
都已设置。悬停,实际上没有保存日志。权限已到位。那又怎样呢?我已经读过这个帖子:PHP CLI won't log errors,但是在这里找不到解决方案。
答案 0 :(得分:8)
PHP通过CLI和HTTP请求都使用不同的php.ini配置。在你的情况下,我怀疑,如果你正在处理CLI PHP使用的php.ini。你能尝试执行:
$ php -i >> info.txt
这会将 phpinfo()保存到本地文件 info.txt 。然后打开文件并找到设置“已加载的配置文件” - 这应该指向加载的php.ini文件的绝对路径。
如果一切正常,则只需运行CLI命令即可测试函数 error_log 是否按预期工作。通过CLI执行:
$ php -r "error_log('test error', 3, './errors.log');"
您应该在同一目录中找到 errors.log 并指定测试错误。如果找不到,那么您可能需要更新php.ini设置或设置正确的写入权限,进程或文件所有者。
答案 1 :(得分:1)
日志文件可能已经由php(mod_php或php_fpm等)用不同的用户(www-data?)创建。因此,如果您像其他任何人一样运行脚本,它可能没有对该文件的写入权限,甚至可能无法访问该路径。您可以尝试以不同的用户身份运行它
sudo -u www-data php your_script.php