PHP實現前台同步顯示後台任務進度

2021-07-03 18:46:39 字數 1102 閱讀 4266

這兩天需要給公司開發乙個簡訊傳送提醒的功能,一次批量傳送幾千條簡訊。

如果直接在後台迴圈執行雖然可行,但是前台操作使用者就只能坐著空等,完全看不到後台執行結果,所以考慮能不能有一種辦法可以在php後台執行過程中同時在前台顯示後台執行任務進度呢。

但是這裡遇到乙個問題,一般情況下php都是在後台任務執行完畢後輸出結果到瀏覽器,在執行過程不會給瀏覽器傳送任何資料。這個時候想到了可以使用php的flush函式,可以使用flush函式在程式執行中強制輸出;

嘗試以下**:?

<?php

for($i= 1;$i<= 50;$i++)

?>

網上大都這樣的例子,看**應該會每隔一秒輸出乙個數字。但是大家實際測試下情況並非如此,而是和沒用flush一樣,一次性輸出1-50;

其中有一段話:

有些apache的模組,比如mod_gzip,可能自己進行輸出快取,這將導致flush()函式產生的結果不會立即被傳送到客戶端瀏覽器。

甚至瀏覽器也會在顯示之前,快取接收到的內容。例如 netscape瀏覽器會在接受到換行或 html 標記的開頭之前快取內容,並且在接受到 標記之前,不會顯示出整個**。

一些版本的 microsoft internet explorer 只有當接受到的256個位元組以後才開始顯示該頁面,所以必須傳送一些額外的空格來讓這

些瀏覽器顯示頁面內容。

所以找到問題所在了,不是因為flush沒有起作用,而是伺服器或者瀏覽器在內容不到一定的位元組數(甚至是沒有遇到html標記)同樣會進行快取,找到問題所在後嘗試以下**;

<?php

echostr_repeat("

",4096);//隨便輸出一段**立即輸出

for($i= 1;$i<= 50;$i++)

?>

discuz! 安裝嚮導

<?php

//檢測完成後顯示的資訊

functionshowjsmessage($message)

//模擬初始化資料表

for($i= 1;$i<= 50;$i++) ... 成功");

sleep(rand(0, 1));}

?>

前台顯示後台資料

1.2.request.querystring id 3.後台動態新增伺服器控制項到前台 第一步 在我們所在的頁面動態新增乙個容器,例如 div 並標記為伺服器型別 runat server 第二步 動態建立伺服器控制項 private string k 1 protected void btnad...

PHP基於websocket的前台及後台實時推送

php websocket 實時訊息推送 實現步驟如下 1.獲取在 goeasy 官網上註冊乙個賬號,並新建乙個 建立好後系統會為該 自動生成兩個 key,乙個既可以用來接收又可以用來推送 supper key 另乙個只可以用來接收 subscriber key 2.客戶端訂閱乙個 channel....

Ionic前台與PHP後台間資料互動

ionic 目錄 我們在開發ionic程式中,必不可少的要與後台進行資料互動,有將資料提交伺服器和從伺服器獲取資料的操作。如果我們伺服器使用php語言進行開發,可能會遇到以下問題 1 無法訪問伺服器。2 伺服器端使用 post 命令無法獲取前台提交的資料。下面我們就一一說明這些問題如何解決。1 無法...