簡體   English   中英

Web服務器是否可以使用長時間的輸出流來響應HTTP請求?

[英]Is it possible for a web server to respond to a HTTP request with an extended time stream of output?

在控制台中運行PHP腳本時,腳本運行時,該腳本的所有標准輸出文本都會顯示在控制台窗口中。 在運行冗長的PHP腳本時,瀏覽器窗口是否有可能在瀏覽器中類似地接收狀態報告,而不是在腳本結束時轉儲所有輸出?

是。 只需定期調用flush()和ob_flush()即可。 重要的是至少每120秒編寫一些輸出,以保持與瀏覽器的連接有效。

一個粗略的例子:

    while(!$done) {
        //doWork();
        echo number_format(100 * ($workDone/$workTotal)) . "% ";
        flush();
        ob_flush();
    }

編輯:這是在我的環境中有效的概念的任意證明:

print('hello');
print(str_repeat(".\n", 2048));
flush();
//this might be a safe way to only flush the buffer if necessary?
if(ob_get_length())
    ob_flush();
sleep(60);

是的,如果執行時間特別長,您需要擔心的一件事就是超時。 這可能是由於PHP超時或瀏覽器超時(通常約2分鍾)而發生。

這個有關連接處理的 PHP文檔中有很多有關保持連接活動的良好信息。

暫無
暫無

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

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