本帖最後由 zhoumengkang 於 2013-05-28 13:46:14 編輯
測試代碼如下:
abc___'.$i;ob_flush();flush();sleep(1);}ob_end_flush();?>
理論上應該是1秒出來一條是吧?但是我測試的結果是5秒之後才一起出來。
網上查了下有這樣說的“個別web伺服器程式,特別是Win32下的web伺服器程式,在發送結果到瀏覽器之前,仍然會緩衝指令碼的輸出,直到程式結束為止。 ”我這個是64位的windows的本地xampp的Integration Environment。
回複討論(解決方案)
這種無端佔用使用者頻寬的做法是很無聊的
延時輸出的效果應在瀏覽器中用 js 實現
你的代碼在 IE 中永遠都不會看到期望的效果,因為 IE 需等待緩衝區裝滿後才解釋收到的資料
這種無端佔用使用者頻寬的做法是很無聊的
延時輸出的效果應在瀏覽器中用 js 實現
你的代碼在 IE 中永遠都不會看到期望的效果,因為 IE 需等待緩衝區裝滿後才解釋收到的資料
額,不是,我知識對這個函數不太瞭解。我用的chrome在測試。
其實我是想實現這樣的效果:比如我寫一個指令碼批量處理一些檔案
但那個過程可能很漫長,給別人用的話,別人都不知道是在執行呢,還是卡死了。
所以想每迴圈執行成功一次就輸出一句xxxx執行成功;
-------------
最類似的就是咱們安裝開源軟體的時候見到的建立資料表的時候的顯示。
但是我自己寫的就會在資料表全部建立完之後才能顯示。
這種無端佔用使用者頻寬的做法是很無聊的
延時輸出的效果應在瀏覽器中用 js 實現
你的代碼在 IE 中永遠都不會看到期望的效果,因為 IE 需等待緩衝區裝滿後才解釋收到的資料
我的想法不是“延時”而是“即時”的顯示我已完成的操作。不知道版主有什麼高招。
同問!我現在也有一個程式要運行幾個小時,一直運行,我只能去資料庫查看資料來判斷是否運行正常。
我的暫時做法只能做個簡單的監控。比如在程式中加memcache寫入操作,另外寫個頁面來讀取。
同問!我現在也有一個程式要運行幾個小時,一直運行,我只能去資料庫查看資料來判斷是否運行正常。
我的暫時做法只能做個簡單的監控。比如在程式中加memcache寫入操作,另外寫個頁面來讀取。 有好的辦法了,記得分享下 我去看看別的開源的代碼在安裝的時候是如何?那個即時顯示的效果的。
我又回來了,試試
';ob_flush();flush(); sleep(1);}?>
這兩天出這個問題的還挺多的。
這個寫法在各瀏覽器測試都沒問題,但有童鞋說,這種做法往緩衝區寫垃圾,可以試試PHP拋出異常,有空研究一下再分享 。
我又回來了,試試
';ob_flush();flush(); sleep(1);}?>
這兩天出這個問題的還挺多的。
這個寫法在各瀏覽器測試都沒問題,但有童鞋說,這種做法往緩衝區寫垃圾,可以試試PHP拋出異常,有空研究一下再分享 。
試了下,果然OK。機密是在哪裡?
我又回來了,試試
';ob_flush();flush(); sleep(1);}?>
這兩天出這個問題的還挺多的。
這個寫法在各瀏覽器測試都沒問題,但有童鞋說,這種做法往緩衝區寫垃圾,可以試試PHP拋出異常,有空研究一下再分享 。
完全是因為這個?echo str_pad('',4096);
第二個設定時限的可以省略,這個程式跑下來肯定不會超過30秒。
拋出異常,try-catch還可以這樣用,學習了,我好好想想!你是一個好人!
嗯嗯,我的這個程式一開始考慮用php_cli,因為程式步驟多,覺得不友好,還是選擇頁面;但已耗用時間太長,開著頁面反倒成了累贅,還是用cli吧,加油。
嗯嗯,我的這個程式一開始考慮用php_cli,因為程式步驟多,覺得不友好,還是選擇頁面;但已耗用時間太長,開著頁面反倒成了累贅,還是用cli吧,加油。 今天又試了下用chrome測試,還是等運算完了,一次性輸出。