php返回500错误但没有错误日志

rya*_*zec 55 php apache error-handling logging

我有一个问题,当我有一个PHP应用程序返回内部服务器错误(500),但错误日志中没有显示任何内容.

现在我知道我正在尝试运行的错误,我知道我已经丢失了一些文件,但是什么不是,但是应该在apache错误日志中显示一些内容(否则我应该怎么知道我到底错过了什么).

我创建了一个测试脚本是在同一个vhost配置下的错误,并且这些错误显示正常,所以一切似乎都配置为php/apache.是否有某些php错误确实显示在错误日志中(php配置为显示任何类型的通知,警告,错误,致命错误等...)?

这是在ubunut 10.04上运行的标准apache和来自ubuntu repo的php和apt-get.

Luc*_*c M 51

扫描您的源文件以查找@.

来自php文档站点

目前,"@"错误控制运算符前缀甚至会禁用将终止脚本执行的严重错误的错误报告.除此之外,这意味着如果你使用"@"来抑制来自某个函数的错误,并且它不可用或者输入错误,那么脚本就会在那里死亡而没有任何关于原因的指示.

  • 就是这样.CodeIgniter显然喜欢在那里使用这些框架,这也是我不喜欢CodeIgniter的另一个原因. (21认同)
  • 这完全是.在我的情况下CodeIgniter的`return @mysql_connect(...`掩盖了我在新服务器上安装php的mysql模块的事实.愚蠢的我,浪费了几个小时,吸取了教训. (8认同)
  • @LucM对于像CodeIgniter这样的事情说起来容易做起来难.由于它们也用于评论,因此在代码库中散布了数千个@符号.所以删除@不加区分的建议实际上是无用的.也许这里的教训不是使用CodeIgniter. (2认同)

aki*_*irk 6

也许某事会关闭错误输出.(我知道您试图说其他脚本正确地将错误输出到错误日志?)

您可以通过确定脚本退出脚本​​的位置来开始调试脚本(首先添加echo 1; exit;到脚本的第一行并检查浏览器是否输出1然后将该行向下移动).


Mel*_*man 6

将以下内容复制并粘贴到新.htaccess文件中,并将其放置在网站的根文件夹中:

php_flag  display_errors                  on
php_flag  display_startup_errors          on
Run Code Online (Sandbox Code Playgroud)

错误将直接显示在您的页面中。

这是快速调试的最佳方法,但是不要长时间使用,因为这可能会违反安全性。

  • 这完全破坏了我的网站 - 运行 PHP 7.4。 (2认同)

jcu*_*bic 6

如果您仍然有 500 错误并且没有日志,您可以尝试从命令行执行:

php -f file.php
Run Code Online (Sandbox Code Playgroud)

它不会像在浏览器(来自服务器)中完全一样工作,但如果您的代码中有语法错误,您将在控制台中看到错误消息。


sgn*_*gon 5

在过去,我在两种情况下没有错误日志:

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