是否可以以类似流的方式过滤PHP标准输出的数据:
standard output ⟶ output filter ⟶ standard output
我已经知道ob_start
了。但我不想一次处理整个输出,而是使用php_user_filter或类似的东西以流式方式处理。
答案 0 :(得分:3)
我不太明白这是为了什么,但是没有理由不发表答案。
您可以使用ob_start()
回调并让其处理部分内容。您只需在初始化后立即设置ob_implicit_flush()
即可。现在通常回调是一个简单的输入输出功能,但你可以根据需要使它变得复杂:
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);
我不确定流使用的是什么样的。但我认为没有其他方法可以拦截PHP标准输出。请注意,隐式刷新在CLI上不起作用。
答案 1 :(得分:0)
如果我正确理解了您的问题,您可以使用ob_start()
,$chunk_size
的第二个参数。
ob_start('my_callback', 1024);
每次输出导致缓冲区达到或超过一千字节时,上面的示例都会调用my_callback()
。如果您在单独的语句中吐出几千字节,my_callback()
将被触发多次。如果您输出几千字节作为单个字符串,这将没有用,因为每个输出最多只能触发一次my_callback()
。