程式要跑比較長的時間的時候會需要用到
沒有使用 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