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

Firebug 报告没有标头,?字节,并且只需要 163毫秒 “加载”(所以这不是超时)。我考虑过快速内存消耗 - 但我监控了我的电脑内存,没有显示任何峰值。到目前为止,错误和异常一直运行良好。

到底是什么?

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

:编辑:

我不会碰 @ 用一根十英尺长的杆子。我认为 Ruby 开发人员把它放在那里,这样程序员就会放弃 PHP。

不管怎样,我启用了xdebug,它没有输出任何grind文件。然后我采纳了 zombat 的建议,在页面顶部放置了一个 DIE() ,它起作用了。我想我只是有一些 很奇怪 完全杀死 PHP 的代码。即使错误被禁用或抑制 @ 我仍然应该从服务器返回一个内容为空的标头!

如果我找到更多,我会回复。

有帮助吗?

解决方案 7

我猜的答案,这个问题 - 事实证明,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只是“末端”。怪异。

其他提示

从控制台运行的页面,你会得到错误信息。

// nix
php yourFile.php

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

您可以有这个目录已经修改错误报告在.htaccess文件。

要测试,尝试在你的PHP脚本这是给你的麻烦的顶部明确设置这些选项。

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

我也看到了这一点引起过分热心的反病毒软件包。一些含有Web代理软件来过滤互联网和电子邮件。在这种情况下,该网页将只是继续加载到无穷远,但永远不会完成。

当心@(误差抑制)运算符,如果你有线路上的语法错误与@ PHP将静默退出。

要探测到这种情况,使用的set_error_han dler 和写自己的错误处理,你仍然可以要求在使用@错误。

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

  • 一个放错地方的 exit() 陈述?您正在编写代码,也许您添加了一个快速 exit() 检查某些东西,却忘记将其删除?
  • don.neufeld 的检查使用情况的想法 @ 运算符,它会抑制任何错误消息,在过去花费了我数小时的调试时间。绝对是值得寻找的东西。

在这种情况下,穷人的调试方法可以快速产生结果。扔一个 exit('wtf'); 作为此处相关脚本的第一行。那运行吗?那个测试的结果,无论结果如何,都立即排除了各种可能性。如果没有得到任何输出,则可能是服务器级别的问题(配置、错误模块等),但要小心任何更高级别的缓冲。如果确实得到输出,那么您就知道服务器正常,问题出在脚本的更深处,在这种情况下,您可以将 exit() 写下几行,冲洗并重复。这不是一种优雅的调试方式,但它快速且肮脏,您可能会在几分钟内找到问题。

检查php.ini中short_open_tag的值为= On或short_open_tag的值为=关

这里最有可能的是apache崩溃了。也许查看 apache 错误日志,或者附加一个调试器。

有关在 Windows 上调试 apache/php 进程的详细信息,请参见 http://bugs.php.net/bugs-generate-backtrace-win32.php

要激活错误显示在你的PHP代码的情况下,你看不到任何东西,插入

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

实施例,其中本potentialy可以节省大量的时间:

这个代码在一个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 } ?>

输出:

“在这里输入的图像描述”

检查事件日志。

当出现这种情况,通常是值得切割出尽可能多的代码,看是否可以得到网页上的东西显示出来。

这可能是由于某个未封闭的报价在你的代码,或者未封闭的支柱。这可能会导致作为文本或者在另一个功能等要观看的回波言。

和,而应该被被报告所有的错误,我发现,并不是所有的错误,实际上报道,可能是因为共享主机就是我够不着的地方在INI设置。

注释掉是不够的 - 不知道为什么。发生这种情况时,我通常会发现它是最快的只是复制的页面,慢慢地剪切和粘贴段回,直到我发现了错误,在这之后,我可以踢自己的愚蠢错字。

你检查你的文件关闭?>标签?或者,更重要的是在他们之后的任何空白......

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top