我正在帮助建立一个Joomla网站(使用Joomla 1.5.26)。其中一个页面非常大。因此,PHP只是停止工作而没有任何错误,所有以前打印的字符串都被忽略。根本没有输出。我们将display_errors设置为TRUE,将error_reporting设置为E_ALL。
我找到了PHP中断的确切行。它位于libraries / joomla / application / component / view.php:196
中function display($tpl = null)
{
$result = $this->loadTemplate($tpl);
if (JError::isError($result)) {
return $result;
}
echo $result;
}
一些信息:
我在执行脚本期间检查了服务器性能。 CPU使用率为100%,但剩余的内存很多。 PHP内存限制为1024M。 output_buffering是4096但是我尝试将它设置为不合理的高数字 - 死在完全相同的位置。服务器运行Apache 2.2.14-5ubuntu8.10和PHP 5.3.2-1ubuntu4.18。 PHP以fast_cgi模块运行。
我从未经历过类似的事情,Google搜索结果也没有。你有没有经历过这样的事情并知道解决方案? 谢谢你的阅读!
答案 0 :(得分:2)
也许尝试爆炸字符串并循环遍历每一行。
你也可以试试这个,在php.net - echo上找到:
<?php
function echobig($string, $bufferSize = 8192)
{
// suggest doing a test for Integer & positive bufferSize
for ($chars = strlen($string)-1, $start = 0;$start <= $chars; $start += $bufferSize) {
echo substr($string, $start, $bufferSize);
}
}
?>
基本上,似乎echo无法在一次调用中处理如此大的数据。以某种方式打破它应该让你到达你需要去的地方。
答案 1 :(得分:0)
尝试使用print_r
而不是echo
function display($tpl = null)
{
$result = $this->loadTemplate($tpl);
if (JError::isError($result)) {
return $result;
}
print_r($result);
}
答案 2 :(得分:0)
我已经在CLI上对此进行了测试,它在PHP 5.4.11和5.3.15中运行良好:
$str = '';
for ($i=0;$i<257759;$i++) {
$str .= 'a';
}
echo $str;
似乎可以合理地假设PHP本身工作正常,但输出缓冲区对于Apache / fast_cgi来说太大了。我会进一步调查Apache配置。你有任何特殊的Apache设置吗?
答案 3 :(得分:0)
答案 4 :(得分:0)
我似乎自己解决了这个问题。这有些出乎意料的事情 - 错误的HTML格式化。我们使用模板作为订单页面,里面有一个显示所有订购产品的循环。当有一些产品,一切都很好,但当我尝试用40种产品做同样的事情时,页面确实破了。 但是,我仍然不明白为什么服务器响应为空,状态代码为200.
感谢所有人的答案!