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了。

主要參考https://stackoverflow.com/questions/4706525/php-flush-not-working