检查输出的一部分是否已在PHP中发送

时间:2012-01-13 12:49:59

标签: php

在PHP中,是否有(现成的)方法来检查输出的一部分是否已经发送到客户端?

我知道使用headers_sent()您可以检查标头是否已经发送,但我还想检查是否已发送任何输出(例如HTTP标头{ {1}}> 0)。

(请注意, Content-Length 从调用它的那一刻开始输出缓冲。但是实现我的代码的第三方系统可能已经发送了输出,因此输出缓冲是据我所知,无法使用。)

2 个答案:

答案 0 :(得分:3)

您可以将自己的ob_start包装在其他所有内容中,并在您决定时将其刷新。即使其他ob_start和刷新在里面,它也能工作。举个例子:

ob_start();
[...]
//some 3rd party app which is included on the way
    [...]
    ob_start();
    [...]
    ob_flush(); //at this moment the buffer isn't flushed to the client
                //but to the parent ob_start, which is yours, so no output
                //is sent yet
 [...]
 //ok, we're done, we can output now
 ob_flush();

答案 1 :(得分:1)

在大多数情况下,PHP仅使用某些内容或在脚本执行结束时向Apache发送标头。因此,如果发送标头,则也会发送一些内容。此外,据我所知,Content-Length无论如何都会在脚本执行后计算出来。