PHP - error_log()不会打印到文件

时间:2018-03-06 23:05:37

标签: php debugging

标题几乎说明了一切。我一直在试着整天都在努力工作。我正在创建基于PHP的登录系统,我需要做一些调试。对我来说,最有用的是能够在整个PHP程序的某些点将调试消息写入文件。根据文档,看起来这就是error_log()应该做的事情,但尽管我尝试了一切,但我完全没有成功。我在下面尝试过的所有内容的完整列表:

  • /etc/php/7.0/apache2/php.ini

    中添加了以下内容
    error_reporting = E_ALL
    display_errors = On
    log_errors = On
    
  • 此外,尝试将error_log设置为/usr//var/www/http//home/

  • 内的位置
  • 使用ini_set()error_reporting()设置所有这些变量,包括PHP文件中的error_log

  • 手动创建应该写入的文件,并将其拥有的用户和组设置为www-data,并将其权限设置为777

  • 最后但同样重要的是,重新安装libapache2-mod-php7.0php7.0,但无济于事

  • 基本上所有的东西都不能用我的笔记本电脑在跳到我的未来之前立刻打破我办公大楼的第三层窗口

我真的找不到其他人试试谷歌,所以我想我会问专家,我在这里。如果有人能提出任何建议,我们将不胜感激。

1 个答案:

答案 0 :(得分:1)

我猜日志会写入sys日志,因为在error_log()中你没有提供目的地。

尝试以下代码

error_log("An error occured", 3, "/var/tmp/my-errors.log");

请确保这个文件可以通过php读取fpm或www-data,具体取决于您在使用触摸之前可以创建它的配置并使用chmod手动添加权限

3表示目的地是文件

如果你使用apache然后检查httpd.conf或任何其他地方(v可能出现ErrorLog的位置

ErrorLog "/var/log/apache2"

然后检查此文件是否包含具有ls -la ll等的以下用户组

 -rwxrwxr-x 1 www-data www-data 

应该出现这样的事情。

另一个选项是在正确的php.ini中设置以下内容(CLI和apache有不同的php.ini文件)

 error_log = /var/log/phperrors.log 

然后

 touch /var/log/phperrors.log
 chown www-data: /var/log/phperrors.log
 chmod +rw /var/log/phperrors.log

没有奇迹,但如果它仍然不起作用,您可以使用set_error_handler()编写并注册自己的错误处理程序,您可以在php manual中找到如何执行此操作的示例。它更像是黑客,但它肯定会起作用。如果它不会那么它意味着根本没有触发错误那么你应该看看你是否编辑了正确的php.ini或者在触发错误之前使用ini_set()。