2016-09-26 62 views
1

注意:是的,我曾經問過這個問題一次,但它立即被標記爲重複,雖然鏈接的副本幾乎沒有任何關係與我的問題。刷新功能暫時刪除我的html

我寫了一個php腳本,執行我的應用程序從網上下載圖像。爲了展示我在網站上取得的某些進展,我使用了flush來回應用戶的一些信息。這裏是我的代碼:

 echo '<li class="list-group-item list-group-item-info">Starting to gather data!</li>'; 
     ob_flush(); 
     flush(); 
     $url = $unsplash; 
     $cmd = $unsplash . ' - ' . $amount; 
     exec($cmd); 
     echo '<li class="list-group-item list-group-item-success">Gathering Data Completed</li>'; 
     ob_end_flush(); 

我使用的代碼做的工作沒有任何問題(除了這一個),所以不存在的錯誤!

不幸的是,我在php腳本下編寫的每種HTML內容都會在腳本執行期間被刪除(有時可能需要5分鐘)。但是腳本完成後,立即重新出現下方的內容。另外值得一提的是,當我在執行scipt期間在Chrome(F12)中打開DevTools時,什麼也沒有顯示!

我做錯了什麼?我似乎無法弄清楚......

謝謝

回答

1

我不知道,正是你的「被刪除」的意思,但你需要考慮什麼是輸出緩衝可以發生在多個級別(PHP,Web服務器,客戶端UA等)。

如果腳本的輸出沒有立即顯示,很可能是在更高級別啓用了output_buffering(即在您的php.ini或其他加載的配置中)。由於輸出緩衝區級聯,它們在每個級別都會刷新。檢查phpinfo(),如果你看到比0output_buffering以外的值,那麼你需要編輯phpinfo()顯示php.ini文件負載的配置(靠近頂部)下和值更改爲0然後重新啓動你的父母PHP程序。

另一件需要考慮的事情是,有些瀏覽器不會渲染一些HTML塊級元素,如<div>,<ul>等,直到它們關閉。內容可能已經到達客戶端,但是一些瀏覽器在塊級元素完成之前不處理內容的渲染。因此,更好的方式來測試在客戶端接收輸出時沒有這些變量的細微差別,可能是從PHP發送文本/純文本內容類型標題,以便將HTML呈現內容排除在外。 header('Content-type: text/plain'),如果在PHP中關閉output_buffering仍然沒有給你想要的結果。

+0

我的意思是說,任何類型的HTML內容我放在我的這個PHP腳本下面的時間腳本運行 - 就像沒有什麼。然後腳本完成後重新出現。我檢查了我的phpinfo(),output_buffering的值是4096 - 這是正常的嗎?編輯:我想我們可以算出你的第二個選項,因爲我清楚地可以看到

你好

,在代碼運行的時候它消失了! :) – userlip

+0

「*重新出現*」意味着它有一點已經出現。該語言含糊不清。是的,在大多數默認的php.ini文件中,你會看到'output_buffering'打開。如果你想關閉它(正如你清楚的那樣),那麼就把它設置爲'0',如答案中明確指出的那樣,以達到你想要的行爲。 – Sherif

+0

只是爲了澄清我的意思:http://i.imgur.com/bcNVqo3.gif - 希望幫助:) – userlip