是否可以像流一样过滤PHP标准输出的数据:
standard output ⟶ output filter ⟶ standard output
我已经知道了ob_start
。但我不想一次处理整个输出,而是使用php_user_filter或类似的东西以类似流的方式处理。
是否可以像流一样过滤PHP标准输出的数据:
standard output ⟶ output filter ⟶ standard output
我已经知道了ob_start
。但我不想一次处理整个输出,而是使用php_user_filter或类似的东西以类似流的方式处理。
我不太明白这是为了什么,但这没有理由不发布答案。
您可以使用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 上不起作用。
如果我正确理解您的问题,您可以为此使用 to 的第二个ob_start()
参数$chunk_size
。
ob_start('my_callback', 1024);
上面的示例将在my_callback()
每次输出导致缓冲区达到或超过一千字节时调用。如果您在单独的语句中吐出几千字节,my_callback()
将被触发多次。如果您将几千字节作为单个字符串输出,这将没有用,因为my_callback()
每个输出最多只能触发一次。