Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php返回500错误,但没有错误日志_Php_Apache_Logging_Error Handling - Fatal编程技术网

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

php返回500错误,但没有错误日志,php,apache,logging,error-handling,Php,Apache,Logging,Error Handling,当我有一个php应用程序返回一个内部服务器错误(500)时,我遇到了一个问题,但是错误日志中没有显示任何内容 现在我知道我正在尝试运行的东西有错误,我知道我丢失了一些文件,但apache错误日志中应该显示一些东西(否则我怎么知道我丢失了什么) 我创建了一个测试脚本,它在相同的vhost配置下出现错误,这些错误显示得很好,因此,就php/apache而言,所有配置似乎都是正确的。错误日志中是否显示了某些php错误(php被配置为显示任何类型的通知、警告、错误、致命错误等) 这是在ubunut 10

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

现在我知道我正在尝试运行的东西有错误,我知道我丢失了一些文件,但apache错误日志中应该显示一些东西(否则我怎么知道我丢失了什么)

我创建了一个测试脚本,它在相同的vhost配置下出现错误,这些错误显示得很好,因此,就php/apache而言,所有配置似乎都是正确的。错误日志中是否显示了某些php错误(php被配置为显示任何类型的通知、警告、错误、致命错误等)


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

您需要启用php错误日志

这是由于web服务器中的一些随机故障,当您出现php错误时,它会抛出500个内部错误(我也有同样的问题)

如果查看PHP错误日志,应该可以找到解决方案


可能有什么东西关闭了错误输出。(我知道您试图说其他脚本正确地将其错误输出到错误日志?)


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

扫描源文件以查找
@

当前“@”错误控制运算符前缀甚至将禁用 将终止脚本的关键错误的错误报告 执行。除此之外,这意味着如果您使用“@”来 抑制某个函数的错误,或者该函数不可用 或者输入错误,脚本将在那里死掉,而不会出现任何错误 说明原因


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

  • 运行Apache的用户没有修改
    php\u error\u log
    文件的权限
  • 由于
    .htaccess
    的错误配置(例如错误的重写模块设置),出现错误500。在这种情况下,错误被记录到Apache
    error\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错误日志已启用,但