程式要跑比較長的時間的時候會需要用到
沒有使用 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->linkto() 這個 phalcon function call 可以產生出一個link (使用預設的 baseuri),然後就可以 echo 出去(或者顯示在需要的位置上)顯示在畫面上。如此就可以動態產生link了。
主要參考https://stackoverflow.com/questions/4706525/php-flush-not-working