php 中的错误没有记录或显示

php 中的错误没有记录或显示

写入日志文件时,屏幕上无法显示任何错误。检查 phpinfo() 打印输出时,我发现 master 和 local 的值相同

display_errors On 
display_startup_errors On
error_log /var/log/php.log
error_reporting E_ALL & ~E_NOTICE
log_errors On
log_errors_max_len

ls -l /var/log/php.log 是 -rw-rw-rw- 1 root root 0 Jun 21 07:47 /var/log/php.log 用于 /var 和 /varlog drwxrwxrwx 23 root root 4096 Jun 2 11:13 var

当代码中出现错误时,浏览器不会显示任何内容,浏览器会提示页面没有源代码。有没有建议去哪里查看或将错误改成在某个地方显示(任何地方都很好)

编辑:我的错误脚本现在是

<?php
ini_set('display_errors', 1);
error_reporting(E_ALL);
echo "print from error.php 2 ";
error                        
//print from erroerror to cuase logging to happen.
?>

这将打印在显示屏上并记录

Notice: Use of undefined constant error - assumed 'error' in /var/www/piku_dev2/error.php on line 7

但是如果我在错误行中输入像 #@$%$ 这样的垃圾,那么我不会在任何地方收到错误消息。

编辑2: 问题出在 httpd.conf 文件中。我还不知道是什么问题,因为其他人已经修复了它。

答案1

我找到了一些可能的解决方案。以下是您可能遇到的最常见问题:

  • 在您的示例中,您使用#@$%$来引发错误。但是,PHP 将以哈希开头的任何行视为注释,因此永远不会评估此行,因此它永远不会触发错误情况。
  • 您应该注意2 个不同的php.ini文件;一个用于 Apache,一个用于 PHP CLI。如果您的脚本是从 Web 浏览器调用的,请确保您编辑的文件是用于 Apache 的文件。此文件所在的目录因发行版而异,但默认路径通常略有不同/etc/php/apache/php.ini
  • 必须对文件进行更改后重新启动 Apache php.ini,或者向 Apache 发送 SIGHUP 以强制重新读取配置文件。
  • error_reporting和配置变量log_errors可以在 Apache vhost 文件中本地覆盖,甚至可以在 PHP 脚本本身中覆盖。确保默认服务器配置不会在您使用的 vhost 的 Apache 配置中本地覆盖这些变量。
  • 您的文件的权限/var/log/php.log需要由 Apache 写入。将此文件的所有者设置为系统上的 Apache 用户(Apache 用户通常是www-dataapache)通常比较安全。

答案2

似乎显示错误或者错误报告被其他东西覆盖了。

这发生在我身上,因为一个应用程序在引导程序的稍后更改了 error_reporting,但我没有看到。

一个好的做法是在应用程序中搜索 error_reporting 并查看它在某处是否被修改。

答案3

我以前有过两种情况没有错误日志:

  1. 运行 Apache 的用户没有修改php_error_log文件的权限。
  2. 错误 500 是由于配置错误而发生的.htaccess,例如重写模块设置错误。在这种情况下,错误会记录到 Apacheerror_log文件中。

答案4

我的问题是,apache 不仅无法写入日志文件,也无法写入 /var/log/httpd 目录。

我的解决办法?

php.ini 错误日志 = /var/log/httpd/php-error.log

chmod 777 /var/log chmod 777 /var/log/httpd

顺便说一下,我正在运行 CentOS 6。一定有比将日志和 httpd 文件夹 chmod 为 777 更好的方法,但这是我让它工作的唯一方法。您可以将 apache 添加到 root 组,但这不是个好主意。

相关内容