问题描述
最近在非常旧的旧版代码库上从apache php更改为php-fpm。有一个问题,整个页面停止呈现,而fpm或apache日志中没有错误。
我写了一个快速测试脚本来重现错误
<?php
error_reporting(E_ALL);
ini_set('display_errors','on');
for ($k = 0; $k < 1000; $k++) {
echo "new line: " . $k;
echo "<br>";
print_mem();
trigger_error("php-fpm error");
}
function print_mem()
{
/* Currently used memory */
$mem_usage = memory_get_usage();
/* Peak memory usage */
$mem_peak = memory_get_peak_usage();
echo 'The script is now using: <strong>' . round($mem_usage / 1024) . 'KB</strong> of memory.<br>';
echo 'Peak usage: <strong>' . round($mem_peak / 1024) . 'KB</strong> of memory. <br><br>';
}
我们目前正在清理遗留代码,但是这是一项繁重的工作,您能提出一种克服此限制的方法吗?
解决方法
问题是由php中的输出缓冲引起的
在php.ini中从4096更改为开。
; Development Value: 4096
; Production Value: 4096
; http://php.net/output-buffering
output_buffering = On
它现在呈现完整循环。
我不确定为什么这会导致php停止渲染,也不建议按照php.ini中的详细说明将output_buffering设置为On。