PHP生成一个完全白页,没有错误,日志或标题。

时间:2009-12-22 04:06:07

标签: php wsod

在我的私人WAMP PC上运行一些PHP代码时,我突然从服务器得到一个空白的响应 - 实际上没有响应。没有标题,没有数据,PHP错误日志中没有任何内容,nada。我重新启动了APACHE和PHP,但仍然没有。我知道php正在运行,因为我可以很好地访问其他PHP脚本。

Firebug报告没有标题,?字节,只需要 163ms 来“加载”(所以它不是超时)。我想到了快速的内存消耗 - 但我监控了我的PC的内存并且没有出现任何高峰。到目前为止,错误和异常一直很好。

世界上有什么?

max_execution_time = 30 ;
max_input_time = 60 ; 
max_input_nesting_level = 64 ; 
memory_limit = 500M ;

error_reporting = E_ALL | E_NOTICE | E_STRICT
display_errors = On
log_errors = On

:编辑:

我不会用10英尺杆触碰@。我认为红宝石家伙会把它扔进去,所以程序员会放弃PHP。

无论如何,我启用了xdebug并且它没有输出任何研磨文件。然后我接受了zombat的建议并在页面顶部放置了一个DIE()并且它有效。我想我只有一些完全杀死PHP的非常奇怪的代码。即使使用@禁用或禁止了错误,我仍然应该从服务器返回带有空内容的标题!

如果我发现更多,我会回复。

12 个答案:

答案 0 :(得分:8)

从控制台运行该页面,您将收到错误消息。

// nix
php yourFile.php

// Windows
c:\path\to\php.exe yourFile.php

答案 1 :(得分:6)

你可以在这个目录中有一个.htaccess文件,它修改了错误报告。

要进行测试,请尝试在php脚本的顶部显式设置这些选项,这会给您带来麻烦。

ini_set('display_errors',1);
error_reporting(E_ALL);

我也看到这是由过度热心的反病毒软件包引起的。一些包含Web代理软件来过滤互联网和电子邮件。在这种情况下,页面将继续加载到无穷大但从未完成。

答案 2 :(得分:6)

请注意@(错误抑制)运算符,如果您在某行上出现语法错误,则PHP将以静默方式退出。

要检测这种情况,请使用set_error_handler并编写自己的错误处理程序,在使用@时,仍然会调用错误。

答案 3 :(得分:6)

您说其他PHP脚本正在运行,因此表明它可能不是Apache问题。您似乎也正确地记录了所有日志记录设置,并且没有记录任何内容,因此很可能PHP在输出任何内容之前正常退出。以下之一可能是真的:

  • 错误的exit()声明?您正在处理代码,也许您添加了一个快速exit()来检查某些内容,并忘记将其删除?
  • don.neufeld关于检查@运算符的使用的想法,它抑制了任何错误消息,过去花了我几个小时的调试时间。绝对是值得寻找的东西。

在这种情况下,穷人的调试方法可以产生一些快速的结果。在此处的问题脚本中输入exit('wtf');作为第一行。那会跑吗?无论结果如何,该测试的结果立即排除了各种可能性。如果你没有得到任何输出,那么它可能是服务器级问题(配置,坏模块等),但要注意任何更高级别的缓冲。如果你确实获得了输出,那么你知道服务器很好,问题在于你的脚本更深层次,在这种情况下你可以将exit()调用向下移动几行,冲洗并重复。不是一种优雅的调试方式,但它快速而且肮脏,你可能会在几分钟内找到问题。

答案 4 :(得分:1)

检查php.ini设置short_open_tag = On或short_open_tag = Off

答案 5 :(得分:1)

最可能的事情是apache崩溃了。请查看apache错误日志,或附加调试器。

可以在http://bugs.php.net/bugs-generating-backtrace-win32.php

找到有关在Windows上调试apache / php进程的详细信息

答案 6 :(得分:1)

我猜到了这个问题的答案 - 事实证明PHP 5.2.5无法处理递归死亡。

<?php

class A
{
    public function __construct()
    {
        new B;
    }
}

class B 
{
    public function __construct()
    {
        new A;
    }
}

new A;

print 'Loaded Class A';

没有标头,错误,内容,日志,xdebug转储,内存峰值,CPU峰值,服务器崩溃或任何其他内容。大约150ms后,PHP才“结束”。怪异。

答案 7 :(得分:1)

要激活PHP代码中的错误显示,以防您没有看到任何内容,请插入

ini_set('display_errors',1); 
error_reporting(E_ALL);

这样可以节省大量时间的例子:

joomla default.php模板文件中的此代码显示空白页面,没有错误消息,没有第20和第21行

17  <?php if ($params->get('title_article_linkable')) { ?>
18      <a href="<?php 
19          $url = JRoute::_(ContentHelperRoute::getArticleRoute($item->id,$item->catid));
20          ini_set('display_errors',1);
21          error_reporting(E_ALL);
22          echo $url; ?>">
23      <?php echo $this->item->title; ?></a> // should be $item->title !!
24  <?phpLL000000 } else { ?>
25      <?php echo $item->title; ?>
26  <?php } ?>

输出:

enter image description here

答案 8 :(得分:0)

检查事件日志。

答案 9 :(得分:0)

当发生这种情况时,通常需要尽可能多地删除代码并查看是否可以在页面上显示某些内容。

这可能是由于您的代码中某处未公开的引用,或者是未公开的大括号。这可能导致echo语句被视为文本或其他函数等。

而且,虽然应该报告所有错误,但我发现并非所有错误都是实际报告的,可能是因为共享主机上的ini设置无法实现。

评论并不总是足够 - 不确定为什么不呢。当发生这种情况时,我通常会发现复制页面最快,然后慢慢剪切并粘贴部分,直到找到错误,之后我就可以自己做一个愚蠢的错字。

答案 10 :(得分:0)

我有同样的问题,因为我在使用:

ob_flush()

答案 11 :(得分:-2)

您是否检查了文件是否关闭?>代码?或者更重要的是他们之后的任何空白......