【问题标题】:PHP - error_log() will not print to filePHP - error_log() 不会打印到文件
【发布时间】:2018-03-06 23:05:37
【问题描述】:

标题几乎说明了一切。我一直在扯头发,试图让这个工作一整天。我正在创建一个基于 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 无济于事

  • 除了在我即将死去之前用我的笔记本电脑打破我办公楼的 3 层窗户之外,基本上所有的事情都没有

我真的在 Google 上找不到其他可以尝试的东西,所以我想我会问专家,我就在这里。如果有人能提供任何建议,将不胜感激。

【问题讨论】:

  • 不是发送到系统日志吗?您是否使用 error_log 的第三个参数 $destination?
  • 我会仔细检查 php 运行的用户和组。 PHP 可能没有更新文件的权限。
  • @Robert 我们环顾四周 /var/logs 并找不到任何东西。我们确实使用了 error_log 的第三个参数。
  • 使用 php 脚本创建任何文件并查看是哪个用户使用“LS”创建了该文件,然后检查该用户是否有权在您提供的目录中写入/创建日志文件

标签: php debugging


【解决方案1】:

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

试试下面的代码

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

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

3 表示目的地是一个文件

如果您使用 apache,则检查 httpd.conf 或任何其他地方(v 可能存在错误日志的位置

ErrorLog "/var/log/apache2"

然后检查此文件是否有以下用户组ls -lall等。

 -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 中找到如何执行此操作的示例。它更像是 hack,但它肯定会起作用。如果没有,则意味着根本没有触发错误,那么您应该查看是否编辑了正确的 php.ini 或在触发错误之前使用 ini_set() 。

【讨论】:

  • 我的错误,这是我忘记添加到最初问题的一件事。我们也尝试过,但结果是一样的。
猜你喜欢
  • 2013-03-28
  • 2010-11-23
  • 1970-01-01
  • 1970-01-01
  • 2015-01-08
  • 1970-01-01
  • 1970-01-01
  • 2012-03-31
  • 1970-01-01
相关资源
最近更新 更多