Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何流式过滤PHP’;标准输出数据?_Php_Filtering_Outputstream - Fatal编程技术网

如何流式过滤PHP’;标准输出数据?

如何流式过滤PHP’;标准输出数据?,php,filtering,outputstream,Php,Filtering,Outputstream,是否可以以流式方式过滤PHP标准输出的数据: standard output ⟶ output filter ⟶ standard output 我已经知道了ob\u start。但我不想一次处理整个输出,而是以流式的方式使用或类似的方式。我不太明白这是为什么,但这不是不发布答案的理由 您可以使用ob_start()回调,让它处理部分内容。您只需在初始化后立即设置ob\u implicit\u flush()。现在,回调通常是一个简单的in-out函数,但您可以通过以下方法使其变得复杂

是否可以以流式方式过滤PHP标准输出的数据:

standard output  ⟶  output filter  ⟶  standard output

我已经知道了
ob\u start
。但我不想一次处理整个输出,而是以流式的方式使用或类似的方式。

我不太明白这是为什么,但这不是不发布答案的理由

您可以使用
ob_start()
回调,让它处理部分内容。您只需在初始化后立即设置
ob\u implicit\u flush()
。现在,回调通常是一个简单的in-out函数,但您可以通过以下方法使其变得复杂:

class ob_callback {
    function __invoke($part, $end_flag_0x04) {
        return "+$part";
        // or map to $stream->filter($in, $out, &$consumed, $closing)
    }
    function __destruct() { /* cleanup */ }
}

ob_start(new ob_callback, 2);
ob_implicit_flush(TRUE);

我不确定stream-y的用法会是什么样子。但我认为没有其他方法可以拦截PHP标准输出。请注意,隐式刷新在CLI上不起作用。

如果我正确理解了您的问题,您可以使用第二个参数
ob\u start()
$chunk\u size

ob_start('my_callback',1024)


上述示例将在每次输出导致缓冲区达到或超过1 KB时调用
my_callback()
。如果在单独的语句中吐出几千字节,
my\u callback()
将被触发数次。如果您将几千字节作为一个字符串输出,这将不会有用,因为每次输出最多只能触发一次
my_callback()

所以您想的是定义一个回调,修改进入标准输出的内容?如果是,何时调用该回调(多久调用一次)?@Jon:调用的数量可能取决于输出块的数量(例如,
echo
参数、输出行或某些内部缓冲区等)。或者只调用一次,就可以在处理每个块的准无限循环期间检查流状态。