PHP實現即時將結果輸出到瀏覽器
添加時間:2014-7-3 3:08:15
添加:
思海網絡
web開發中有沒有碰到需要適時的將結果輸出到瀏覽器頁面而不刷新整個頁面的需求呢?當你在處理一個過程需要耗時很長,但你又需要適時的知道程序當前的處理狀況的時候,該怎么辦呢?下面就分享一下如何使用php及時的輸出當前結果到瀏覽器而不刷新整個頁面的效果吧。
下面以一個簡單的例子來說明這個問題。首先來看一段代碼:
<?php for($i=0;$i<10;$i++){ echo $i; sleep(1); } ?>
上面這段程序如果在PHP解釋器中執行,每秒會輸出一個數,和預計效果一樣。但在瀏覽器中訪問時,結果卻是瀏覽器在十秒之后一次性地顯示了所有結果。對于這個問題,我們可以使用 ob_flush() 和 flush() 來強制刷新瀏覽器緩存,程序改為:
<?php //author www.Alixixi.com for($i=0;$i<10;$i++){ echo $i; ob_flush(); flush(); sleep(1); } ?>
問題解決,但又出來個問題,瀏覽器還不兼容了。實際測試中只有 Firefox 按預計效果即時輸出了結果,而在 IE Safari Opera 等瀏覽器中還是一次性的輸出結果。查閱相關資料發現是因為不同的瀏覽器對緩沖的處理方式不同,Firefox 在被要求強制刷新緩存時很聽話,而IE需要在接收到256個字節后才會將內容即時展現在界面上,Safari 需要1024個字節,Opera 更有個性,只有在遇到HTML標簽的時候才會即時輸出(Safari也是如此)。
對于以上問題,針對IE和Safari,可以在輸出結果之前先輸出大于限定數目的空白字符:
<?php echo str_repeat(" ",1024); for($i=0;$i<10;$i++){ echo $i; ob_flush(); flush(); sleep(1); } ?>
而對于Opera、Safari遇到HTML標簽后才會即時輸出的問題,由于一般我們不會只往瀏覽器中輸出純文本內容,故可以不作考慮。對于上面的程序,可以在輸出結果中加入HTML標簽來達到目的:
<?php echo str_repeat(" ",1024); for($i=0;$i<10;$i++){ echo $i."<br>"; ob_flush(); flush(); sleep(1); } ?>
至此已基本實現了在各個瀏覽器中達到一致的效果了,至于實際工作中,你可能是另外一種目的但是需要類似這種效果,則只需要根據需要做相應的修改即可。
關鍵字:PHP、瀏覽器、程序
新文章:
- CentOS7下圖形配置網絡的方法
- CentOS 7如何添加刪除用戶
- 如何解決centos7雙系統后丟失windows啟動項
- CentOS單網卡如何批量添加不同IP段
- CentOS下iconv命令的介紹
- Centos7 SSH密鑰登陸及密碼密鑰雙重驗證詳解
- CentOS 7.1添加刪除用戶的方法
- CentOS查找/掃描局域網打印機IP講解
- CentOS7使用hostapd實現無AP模式的詳解
- su命令不能切換root的解決方法
- 解決VMware下CentOS7網絡重啟出錯
- 解決Centos7雙系統后丟失windows啟動項
- CentOS下如何避免文件覆蓋
- CentOS7和CentOS6系統有什么不同呢
- Centos 6.6默認iptable規則詳解