簡體   English   中英

如何使用ob_ *設置標題中的內容長度?

[英]How to use ob_* to set the content length in the header?

我正在嘗試在Yii中創建一個Web服務。 Web服務工作正常,但我關心的是如何一起使用ob_start()組 ,以便可以在標頭中設置Content-length 我讀了很多有關ob_ *組的信息,但我仍然對此感到非常困惑。
假設這是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方式可以做到這一點。

  1. 使用afterRender添加標題。 除非您解決該問題,否則它將影響控制器中的每個動作,因此請謹慎使用。 http://www.yiiframework.com/doc/api/1.1/CController#afterAction-detail

  2. 使用自定義過濾器,並根據需要將其應用於所有操作或選擇操作。 我可能會走這條路,因為將來您會有更大的靈活性。 另一個選擇是使用內聯過濾器(類似於上面的afterRender還是基於類的過濾器)。 基於類的特性使跨控制器應用過濾器變得更加容易。 http://www.yiiframework.com/doc/guide/1.1/en/basics.controller#filter

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM