簡體   English   中英

有沒有辦法讓PHP實時將數據打印到Web瀏覽器?

[英]Is there a way to have PHP print the data to a web browser in real time?

例如,如果我有一個echo語句,則無法保證瀏覽器可能立即顯示它,可能會一次顯示幾十個echo語句,並且可能會等到整個頁面完成后再顯示任何內容。

有沒有辦法讓每個echo在執行時出現在瀏覽器中?

您可以使用flush()強制將緩沖區內容發送到瀏覽器。

您可以使用“ ob_implicit_flush(true) ”啟用隱式刷新。

function printnow($str, $bbreak=true){
    print "$str";
    if($bbreak){
        print "<br />";
    }
    ob_flush(); flush();
}

顯然,如果你傳遞復雜的對象(或者至少那些沒有實現__toString的對象),這將不會表現,但是,你明白了。

正如其他人所指出的那樣,除了PHP(例如,Web服務器或客戶端的瀏覽器)之外,還有一些地方可能會被掛起。 如果您確實希望確保信息在可用時顯示,則可能需要一些基於AJAX的解決方案。 您將擁有一個處理顯示的PHP腳本和另一個執行計算的PHP腳本,並讓顯示腳本向另一個執行AJAX請求。 jQuery有一些非常簡單的AJAX函數可以幫助你。

如果瀏覽器不支持/已禁用JavaScript,那么您也希望有一個后備,這只是標准頁面,可能直到最后才顯示內容。

您可以在PHP中調用flush() ,但是可以保留輸出的其他幾個位置(例如,在Web服務器上)。 如果您正在使用輸出緩沖,則還需要調用ob_flush()

您可能還會發現某些瀏覽器在HTML有效之前不會呈現頁面,直到所有標記都關閉(如body,html)

啟用隱式刷新為藍色表示應該這樣做,因為它在每個回聲后調用flush,但是某些瀏覽器也需要設置no-cache標頭。 這是我使用的。 您的里程可能因瀏覽器而異。

header('Cache-Control: no-cache, no-store, max-age=0, must-revalidate');
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // Date in the past
header('Pragma: no-cache');

flush()是答案的一部分。 至少在一年前,在Safari中使用flush是不可靠的。 根據您的情況,我會研究涉及javascript的解決方案。 也許進度條的各種實現都有可以回收的代碼/想法。

我建議使用AJAX。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM