我有一个问题,当我有一个php应用程序返回一个内部服务器错误(500),但没有显示在错误日志
现在我知道我正在尝试运行的东西有错误,我知道我丢失了一些文件和什么不是,但应该在apache错误日志中显示一些东西(否则我应该如何确切地知道我丢失了什么)。
我创建了一个测试脚本是错误的,它在相同的vhost配置下,这些错误显示得很好,所以一切似乎配置正确的php/apache。是否有某些php错误显示在错误日志(php配置显示任何类型的通知,警告,错误,致命错误等…)?
这是运行在ubuntu 10.04上的标准apache和php从ubuntu repo与apt-get。
扫描源文件查找@
来自php文档站点
目前"@"错误控制操作符前缀甚至会被禁用将终止脚本的严重错误的错误报告执行。除其他事项外,这意味着如果您使用"@"来抑制来自某个函数的错误,或者它不可用或者已经打错了,脚本将死在那里没有说明原因
如果你仍然有500个错误,没有日志,你可以尝试从命令行执行:
php -f file.php
将不完全像在浏览器(从服务器)中工作,但如果在你的代码中有语法错误,你会在控制台看到错误消息。
将以下内容复制粘贴到新的.htaccess
文件中,并将其放在您网站的根文件夹中:
php_flag display_errors on
php_flag display_startup_errors on
错误将直接显示在您的页面中。
这是快速调试的最佳方式,但是不要长时间使用,因为它可能是一个安全漏洞。
可能有什么东西关闭了错误输出。(我明白你是想说其他脚本正确输出他们的错误到错误日志?)
您可以通过确定退出脚本的位置来开始调试脚本(首先在脚本的第一行添加echo 1; exit;
,并检查浏览器是否输出1
,然后将该行向下移动)。
在过去,我在两种情况下没有错误日志:
- Apache运行的用户没有权限修改
php_error_log
文件 - 由于
.htaccess
配置错误导致错误500发生,例如重写模块设置错误。在这种情况下,错误被记录到Apacheerror_log
文件。
对于Symfony项目,请确保检查项目的app/logs
中的文件。这篇文章有更多的细节:
如何调试Symfony 2中的500 Error
顺便说一句,其他框架或CMS都有这种行为。
下面是错误可能不可见的另一个原因:
我也有同样的问题。在我的例子中,我从生产环境中复制了源代码。因此,在index.php
中定义的ENVIRONMENT
变量被设置为'production'
。这导致error_reporting
被设置为0(没有日志记录)。只需将其设置为'development'
,您应该开始在apache日志中看到错误消息。
原来500是由于数据库配置中缺少分号:-)
另一个发生在我身上的情况是,我做了一个CURL到我的一些页面,并得到内部服务器错误,apache日志中没有任何东西,即使我启用了所有错误报告。
我的问题是在我设置的CURL中curl_setopt($CR, CURLOPT_FAILONERROR, true);
然后没有显示我的错误,虽然有一个,这是因为错误是在框架级别,而不是PHP的一个,所以它没有出现在日志中。
- 当提交表单和时,得到间歇性的错误500
- 即使使用
display_errors(-1)
,也无法显示PHP错误信息
那么问题可能出在
- 你的网络托管公司可能有一个ModSecurity插件安装,检查$_POST的某些正则表达式匹配
可以通过
验证- 进入/home/youraccount/log/…/…/error.log,里面应该有你在浏览器中看不到的详细错误日志
- 进入你的虚拟主机控制面板,找到一个"额外的网络安全?"或者类似的,在那个域中关闭它。你应该能够谷歌信息具体到您的虚拟主机公司。
您需要启用PHP错误日志。
这是由于一些随机故障在web服务器当你有一个php错误,它抛出一个500内部错误(我有同样的问题)。
如果你查看PHP错误日志,你应该能找到你的解决方案。
查看如何在php.ini中启用它
确保您的文件权限是正确的。如果apache没有读取文件的权限,那么它就不能写入日志。
当这是一个问题时,对我来说发生的事情是,网站使用了太多的内存,所以我猜它无法写入错误日志或显示错误。为了清楚起见,这是一个Wordpress网站做的。提高服务器上的内存限制可以再次显示该站点。
解决我为此挣扎,后来,我意识到我在PHP 5.6上工作,所以我升级到PHP 7.0,然后我发布了git为冲突代码放置的注释。我在我的代码中发现了类似的东西<<<<<<<但是解决了它。