PHP返回500错误,但没有错误日志
我有一个问题,当我有一个PHP应用程序返回一个内部服务器错误(500),但没有任何显示在错误日志中。
现在我知道有什么我想运行的错误,我知道我已经错过了一些文件,但什么不是,但应该显示在Apache错误日志(否则我应该怎么知道我缺less什么)。
我创build了一个testing脚本是错误的,它在相同的虚拟主机configuration和这些错误显示良好,所以一切似乎configuration正确的PHP / Apache。 是否有某些PHP错误,显示在错误日志(PHPconfiguration为显示任何types的通知,警告,错误,致命错误等)?
这是运行在ubunut 10.04与标准的Apache和PHP从Ubuntu的回购apt-get。
扫描您的源文件以查找@
。
从PHP文档站点
目前,“@”错误控制操作符前缀将甚至禁用将终止脚本执行的严重错误的错误报告。 除此之外,这意味着如果您使用“@”来抑制来自某个函数的错误,并且该错误不可用或者错误input,那么脚本就会在那里死亡,而不会显示原因。
也许有些东西会closures错误输出。 (我知道你试图说其他脚本正确地输出错误到错误日志?)
您可以通过确定它退出脚本的位置来开始debugging脚本(首先在脚本的第一行添加echo 1; exit;
并检查浏览器是否输出1
,然后再移动该行)。
以前我在两种情况下没有错误日志:
- Apache正在运行的用户没有权限修改
php_error_log
文件。 - 错误500是由于
.htaccess
的错误configuration而发生的,例如错误的重写模块设置。 在这种情况下,错误会logging到Apacheerror_log
文件中。
这是错误可能不可见的另一个原因:
我遇到过同样的问题。 就我而言,我从生产环境中复制了源代码。 因此index.php
中定义的ENVIRONMENT
variables被设置为'production'
。 这导致error_reporting
被设置为0(不logging)。 只要将其设置为'development'
,你应该开始看到在Apache日志中的错误消息。
原来500是由于在数据库configuration中缺less一个半冒号:-)
对于Symfony项目,一定要检查项目的应用程序/日志中的文件
有关此post的更多详情:
如何在Symfony 2中debugging500错误
顺便说一句,其他框架或CMS共享这种行为。
另一个发生在我身上的情况,是我对我的一些页面做了一个CURL,并且得到了内部的服务器错误,而且在Apache日志中什么都没有,即使我启用了所有的错误报告。
我的问题是,在CURL中,我设置了curl_setopt($CR, CURLOPT_FAILONERROR, true);
然后,没有告诉我我的错误,虽然有一个,这是因为错误是在框架级别,而不是一个PHP,所以它没有出现在日志中。
将以下内容复制并粘贴到新的.htaccess
文件中,并将其放在您的网站的根文件夹中:
php_flag display_errors on php_flag display_startup_errors on
错误将直接显示在您的网页中。
这是快速debugging的最好方法,但不要长时间使用它,因为这可能是安全漏洞。
您需要启用PHP错误日志。
这是由于一些随机故障在Web服务器,当你有一个PHP错误,它会引发500内部错误(我有同样的问题)。
如果你看看PHP的错误日志,你应该find你的解决scheme。
请参阅如何在php.ini中启用它的文档
确保您的文件权限是正确的。 如果apache没有读取文件的权限,那么它就不能写入日志。