php buffering flush output & phalcon generate link in action

紀錄一下,因為有程式要跑比較長的時間

沒有使用 buffering flush 的話,會等程式執行完畢之後才輸出,對client端來說會覺得像是瀏覽器一直在嘗試連線,不是太好的UX。

public function execAction()
{
    ob_implicit_flush(1);
    ob_end_clean();
    set_time_limit(0);

    $url = new Url();
    for ($i = 0; $i < 10; $i++)
    {
        echo "hahaah<br>";
        ob_flush();
        flush();
        sleep(1);
    }
    ob_end_flush();
    flush();
    echo $this->tag->linkto("test/index", "Back to index");
}

因為執行時間可能很長,所以要設定 execution time limit,set_time_limit(0)。而比較需要注意的是,很多文件都只有提到說要先呼叫ob_start()才可以做buffering flush,但是測試下來發現可以不用,直接呼叫ob_implicit_flush(1),然後先呼叫ob_end_clean()清空一次buffer,接下來就可以開始使用了。

另外就是最後的$this->tag-&gtlinkto() 這個 phalcon function call 可以產生出一個link (使用預設的 baseuri),然後就可以 echo 出去(或者顯示在需要的位置上)顯示在畫面上。如此就可以動態產生link了。

主要參考這一篇

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料