当抛出多个X通知时,PHP-FPM停止呈现页面

问题描述

最近在非常旧的旧版代码库上从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。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...