4

是否可以像流一样过滤PHP标准输出的数据:

standard output  ⟶  output filter  ⟶  standard output

我已经知道了ob_start。但我不想一次处理整个输出,而是使用php_user_filter或类似的东西以类似流的方式处理。

4

2 回答 2

4

我不太明白这是为了什么,但这没有理由不发布答案。

您可以使用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 上不起作用。

于 2011-03-06T13:44:46.713 回答
0

如果我正确理解您的问题,您可以为此使用 to 的第二个ob_start()参数$chunk_size

ob_start('my_callback', 1024);

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

于 2013-03-23T00:17:37.080 回答