Php 如何使用ob_*设置标题中的内容长度?

Php 如何使用ob_*设置标题中的内容长度?,php,yii,http-headers,Php,Yii,Http Headers,我正在尝试用Yii创建一个web服务。web服务工作正常,但我关心的是如何一起使用ob_start()group,以便在标题中设置内容长度。我读了很多关于ob_*group的书,但我还是很困惑。 假设这是web服务 public function giveTimestamp() { $query='select current_timestamp( );'; $record= Yii::app()->db->creat

我正在尝试用Yii创建一个web服务。web服务工作正常,但我关心的是如何一起使用ob_start()group,以便在标题中设置内容长度。我读了很多关于ob_*group的书,但我还是很困惑。
假设这是web服务

public function giveTimestamp()
        {
            $query='select current_timestamp( );';
            $record=  Yii::app()->db->createCommand($query)->queryScalar();
            return $record;
        }
现在我要做的是,在发送数据时设置标题的内容长度。现在,客户端用户将检查是否已收到指定长度的数据。如果没有,他将再次发送请求,否则将没有请求


那么,我如何结合使用这个ob_*呢?

要获得标题中的输出大小,您需要有权访问输出块:

ob_start(); // enable buffering

echo 'content'; // do the output to memory

header('Content-Length: ' . ob_get_length()); // send header

ob_end_flush(); // send content of buffer and terminate it

但是,我无法帮助您处理Yii部分,因为我没有处理Yii部分的经验。

有两种Yii方法

  • 使用
    afterRender
    添加标题。这将影响控制器中的每一个动作,除非您解决了这个问题,所以请谨慎使用

  • 使用自定义筛选器,并根据需要将其应用于所有操作或选择操作。我可能会走这条路,因为你在未来有更多的灵活性。另一个选择是使用内联过滤器(很像上面的
    afterRender
    ,还是基于类的过滤器)。基于类可以更轻松地跨控制器应用过滤器


  • 你真的需要这个吗<代码>内容长度标题不是必需的。最好使用http状态代码。