php返回500错误,但没有错误日志
当我有一个php应用程序返回一个内部服务器错误(500)时,我遇到了一个问题,但是错误日志中没有显示任何内容 现在我知道我正在尝试运行的东西有错误,我知道我丢失了一些文件,但apache错误日志中应该显示一些东西(否则我怎么知道我丢失了什么) 我创建了一个测试脚本,它在相同的vhost配置下出现错误,这些错误显示得很好,因此,就php/apache而言,所有配置似乎都是正确的。错误日志中是否显示了某些php错误(php被配置为显示任何类型的通知、警告、错误、致命错误等)php返回500错误,但没有错误日志,php,apache,logging,error-handling,Php,Apache,Logging,Error Handling,当我有一个php应用程序返回一个内部服务器错误(500)时,我遇到了一个问题,但是错误日志中没有显示任何内容 现在我知道我正在尝试运行的东西有错误,我知道我丢失了一些文件,但apache错误日志中应该显示一些东西(否则我怎么知道我丢失了什么) 我创建了一个测试脚本,它在相同的vhost配置下出现错误,这些错误显示得很好,因此,就php/apache而言,所有配置似乎都是正确的。错误日志中是否显示了某些php错误(php被配置为显示任何类型的通知、警告、错误、致命错误等) 这是在ubunut 10
这是在ubunut 10.04上运行的,标准apache和php来自ubuntu repo和apt get。您需要启用php错误日志 这是由于web服务器中的一些随机故障,当您出现php错误时,它会抛出500个内部错误(我也有同样的问题) 如果查看PHP错误日志,应该可以找到解决方案
可能有什么东西关闭了错误输出。(我知道您试图说其他脚本正确地将其错误输出到错误日志?)
您可以通过确定脚本退出脚本的位置开始调试脚本(首先在脚本的第一行添加
echo 1;exit;
,并检查浏览器是否输出1
,然后向下移动该行)。扫描源文件以查找@
当前“@”错误控制运算符前缀甚至将禁用
将终止脚本的关键错误的错误报告
执行。除此之外,这意味着如果您使用“@”来
抑制某个函数的错误,或者该函数不可用
或者输入错误,脚本将在那里死掉,而不会出现任何错误
说明原因
过去,我在两种情况下没有错误日志:
php\u error\u log
文件的权限.htaccess
的错误配置(例如错误的重写模块设置),出现错误500。在这种情况下,错误被记录到Apacheerror\u log
文件中以下是错误可能不可见的另一个原因: 我也有同样的问题。在我的例子中,我从生产环境复制了源代码。因此,在
index.php
中定义的ENVIRONMENT
变量被设置为'production'
。这导致error\u reporting
设置为0(无日志记录)。只要将其设置为'development'
,您就应该开始在apache日志中看到错误消息
原来500是因为数据库配置中缺少分号:-)另一个发生在我身上的情况是,我对一些页面进行了卷曲,出现了内部服务器错误,apache日志中没有任何内容,即使我启用了所有错误报告 我的问题是在卷曲时
curl_setopt($CR,CURLOPT_FAILONERROR,true)代码>
这并没有显示我的错误,虽然有一个,但这是因为错误发生在框架级别,而不是PHP级别,所以它没有出现在日志中。对于Symfony项目,请确保检查项目应用程序/日志中的文件
有关此帖子的更多详细信息:
顺便说一句,其他框架或CMS也有这种行为。确保您的文件权限正确。如果apache没有读取文件的权限,则无法写入日志。将以下内容复制并粘贴到新的.htaccess
文件中,并将其放置在网站的根文件夹中:
php_flag display_errors on
php_flag display_startup_errors on
错误将直接显示在您的页面中
这是快速调试的最佳方法,但不要长时间使用它,因为它可能会破坏安全。如果仍然有500个错误且没有日志,则可以尝试从命令行执行:
php -f file.php
它不会像在浏览器中(从服务器)那样工作,但如果代码中有语法错误,您将在控制台中看到错误消息。当这是一个问题时,我遇到的情况是该站点使用了太多内存,所以我猜它无法写入错误日志或显示错误。为了清楚起见,这是一个Wordpress网站做的。提高服务器上的内存限制将再次显示该站点。已解决
我一直在努力解决这个问题,后来,我意识到我正在开发PHP5.6,所以我升级到PHP7.0,然后我发布了git对冲突代码的评论。我在Apache和PHP代码中发现了类似的东西,这两个代码都来自标准的ubuntu repo和apt getIt。CodeIgniter显然喜欢在框架中使用这些,这是我不喜欢CodeIgniter的另一个原因。在我的例子中,CodeIgniter的return@mysql\u connect(…
掩盖了我未能在新服务器上安装php的mysql模块的事实。愚蠢的我,浪费了几个小时,吸取了教训。@LucM对于CodeIgniter这样的东西来说,说起来容易做起来难。有数千个@符号散布在它们的代码库中,因为它们也用于注释。因此,建议删除它们不加区别地使用g@实际上是无用的。也许这里的教训是不要使用CodeIgniter。@Jake大多数IDE都允许在查找和替换中使用正则表达式,也允许在路径中使用正则表达式。所以一点也不无用。@MichaelHanon正如我在5月7日的评论中提到的那样,在CodeIgniter中散布了数千个这样的@符号,因此可以单独验证每次搜索和重新搜索放置结果是不可行的,即使是这样,由于数量太多,该过程仍然容易出错。正如您所指出的,它们一定是有原因的,所以最好的建议不是将它们全部删除。我想您误解了这个问题。他的PHP错误日志已启用,但