2013-01-02 94 views
0

問題:輸出加載消息

之前我執行一個很長的計算過程,我想以輸出加載消息給用戶。

代碼:

<html>   
<!doctype html> 
      <head> 
       <title>Loading</title> 
      </head> 

    <?php 

    function longProcess() 
    { 
     //where long process takes a long time to compute 
    } 

    ?> 
      <body> 
       <?php 
         echo <div id = 'loading'> LOADING </div> 
         echo '</body>'; 
         echo '</html>'; 
         flush(); 
         longProcess(); 

       ?> 

更多詳情:

基本上,我之前所說的longProcess功能,我想輸出負載給用戶。我使用flush,所以我可以輸出HTML的結束標記,然後調用longProcess函數。問題在於它沒有被輸出,服務器正在計算這個漫長的過程。

+0

爲什麼不使用ajax? –

+0

你能給我一些更多的細節嗎? – Goaler444

回答

4

你需要的可能是類似彗星的功能。嘗試以下操作使其工作。

<?php 
// Disable buffering 
@apache_setenv('no-gzip', 1); 
@ini_set('zlib.output_compression', 0); 
@ini_set('output_buffering', 'Off'); 
@ini_set('implicit_flush', 1); 
// Flush buffers 
ob_implicit_flush(1); 
for ($i = 0, $level = ob_get_level(); $i < $level; $i++) ob_end_flush(); 
?><!DOCTYPE html> 
<html> 
<head> 
    <title>Loading</title> 
</head> 
<body> 
    <div id="loading">LOADING</div> 
<?php 
// We need to send enough junk messages to make it works for all browsers 
echo str_repeat(" ", 1024), "\n"; 

ob_start(); 
// Long process starts here 
// For this example, just sleep for 5 seconds 
sleep(5); 
echo "Loaded"; 
// Flush output like this 
ob_flush(); 
flush(); 
?> 
</body> 
</html> 

參考文獻:

+0

謝謝:)它的工作原理。你可以向我解釋在@符號的前幾行中你正在做什麼。還有什麼是ob_命令? – Goaler444

+1

at符號被稱爲錯誤控制操作符。當在PHP中添加表達式時,可能會忽略可能由該表達式生成的任何錯誤消息。 Apache和PHP緩衝區默認輸出。第一行是關閉緩衝區。 'ob_'函數是輸出控制函數。在這裏看到細節:http://php.net/manual/en/ref.outcontrol.php –

0

PHP是服務器端。您無法輸出加載消息。

您可以嘗試將自動重定向到目標頁面的頁面(在此頁面中放置您的「加載」消息)。現在你看到加載頁面,直到你的目標頁面加載

0

,你可以使用PHP可能輸出的JavaScript。您將執行以下操作:

  • longProcess()之前,輸出JavaScript設置內<body>一個#contents DIV是一個加載動畫
  • 運行longProcess()
  • 輸出的JavaScript內<body>設置#contents DIV輸出不管你想要,無論是數據,「完成」或其他。

只是一個快速的想法,幾乎肯定不是最好的,但它會工作。


另一種方法是重新直接使用PHP來完成的頁面,一旦裝載過程未曾使用header完成。

header('Location: http://www.example.com/');

最後,蕭的禁用緩存是你應該看一看的東西!

0

而不是在同一頁計算,

  1. 負載,負載符號
  2. 頁面啓動負載Ajax調用你的PHP文件並執行所有的計算
  3. 關於Ajax響應調用讓你的輸出替換你的加載分區。