题
在我的私人 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设置。
注释掉是不够的 - 不知道为什么。发生这种情况时,我通常会发现它是最快的只是复制的页面,慢慢地剪切和粘贴段回,直到我发现了错误,在这之后,我可以踢自己的愚蠢错字。
你检查你的文件关闭?>
标签?或者,更重要的是在他们之后的任何空白......