簡體   English   中英

PHP輸出緩沖區刷新,然后清除

[英]PHP output buffer flush and then clean

我正在嘗試這樣做:

顯示“ a” 1秒鍾,僅清除屏幕顯示“ b” 1秒鍾,僅清除屏幕顯示“ c”。

到目前為止,這是我所擁有的,但是沒有用:

header("Content-type: text/html; charset=utf-8");
header("Cache-Control: no-cache, must-revalidate");
header("Pragma: no-cache");

set_time_limit(0);
ob_implicit_flush(1);

echo "a";

ob_flush();
ob_clean();

sleep(1);

echo "b";

ob_flush();
ob_clean();

sleep(1);

echo "c";

輸出緩沖區不能以這種方式工作,這是一條單向路。 傳遞給瀏覽器的內容已從服務器發送出去,您再也無法訪問該數據,並且您無法控制用戶已經收到的數據。

唯一的方法是發送控制字符以清除屏幕,但那些不屬於瀏覽器可接受字符的字符。

從理論上講,您可以發送\\x08 (退格鍵),但是除了允許使用這些ASCII控制字符的東西以外,它不能在其他任何東西上工作。 您正在使用終端機還是圖形瀏覽器? 第一個可能會接受,后一個則最不可能。

沒有屏幕。 只有從服務器(PHP在服務器上運行)發送到瀏覽器的輸出。

ob函數使用輸出緩沖。 使用此技術,您可以在將輸出發送到客戶端(瀏覽器)之前在服務器上緩沖輸出(回聲等的結果),甚至丟棄或修改它。

您對這些功能的理解以及您使用它們的方式都是錯誤的。

充其量,結果可能是“ a”首先出現,而“ b”之后第二出現。 但是有兩個問題。 首先,您根本不會啟動輸出緩沖(使用ob_start)。 其次,服務器可能已經向瀏覽器發送了“ a”,但是瀏覽器還會看到它只是一個字母,並且響應仍在繼續,因此它可能不會顯示。 響應的一半通常只是一個不完整的頁面,因此瀏覽器還將緩沖所獲得的響應,以免在屏幕上顯示大量垃圾。 在大多數情況下,它們僅在完全接收到響應或在此之前斷開連接時顯示響應。

簡而言之,這是行不通的。 您將需要JavaScript或元重定向來解決此問題。

在啟用JavaScript的瀏覽器中,您可以這樣做(不需要PHP):

<body/>
<script type="text/javascript">
// Get the body
var doc = document.getElementsByTagName('body')[0];
// Set its text.
doc.innerText = 'A';
// Replace it with another text after a 1000 milliseconds.
setTimeout(function(){
  doc.innerText = 'B';
}, 1000);
</script>

我不會依賴PHP代碼來執行此操作,並希望它的時間正確。 使用php來構建您的頁面並檢索您需要的任何數據,並使用javascript或jquery來完成您要嘗試執行的操作。 使用javascript / jquery,您可以動態設置頁面的html,而無需刷新。 看一下這里

暫無
暫無

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

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