php
2013-06-20 182 views 0 likes 
0

我有這樣的代碼片段:顯示消息

$response = "<div style='font-size:18px;margin-top:2em;text-align:center;color:#173f5f;>"; 
$response .= "Intializing sequence..."; 
    echo $response; 
    $response .= "Starting compression of folders..."; 
    echo $response; 
    $response .= "Compressing all photos now..."; 
    echo $response; 
    $ph = compress('photos'); 
    $response .= "Photo compression complete."; 
    $response .= "Compressing all signatures now..."; 
    echo $response; 
    $sg = compress('signatures'); 
    $response .= "Signature compression complete."; 
    $response .= "Compressing all excel files now..."; 
    echo $response; 
    $excel = compress('uploads'); 
    $response .= "Excel files compression complete.</div>"; 
    echo $response; 

我想顯示的消息compress函數調用的每行之後,但現在,它的運行每次通話的函數,然後在每一行重複的結尾顯示消息。

我該如何解決這個問題?

+0

有人請指導使其成爲實時.. – coder101

回答

0

我認爲其他人已經錯過了這個問題的觀點。當腳本正在處理而不是執行完成時,你希望每一行都「實時」出現。 默認情況下,PHP在腳本執行完成或緩衝區已滿之前不會輸出緩衝區。

當您想要使用此功能時,您可以手動將緩衝區刷新到屏幕。

function fcflush() 
{ 
    static $output_handler = null; 
    if ($output_handler === null) { 
     $output_handler = @ini_get('output_handler'); 
    } 
    if ($output_handler == 'ob_gzhandler') { 
     // forcing a flush with this is very bad 
     return; 
    } 
    flush(); 
    if (function_exists('ob_flush') AND function_exists('ob_get_length') AND ob_get_length() !== false) { 
     @ob_flush(); 
    } else if (function_exists('ob_end_flush') AND function_exists('ob_start') AND function_exists('ob_get_length') AND ob_get_length() !== FALSE) { 
     @ob_end_flush(); 
     @ob_start(); 
    } 
} 

你用它在你的代碼是這樣

echo "<div style='font-size:18px;margin-top:2em;text-align:center;color:#173f5f;>"; 
fcflush(); 
echo "Intializing sequence..."; 
fcflush(); 
echo "Starting compression of folders..."; 
fcflush(); 
echo $response .= "Compressing all photos now..."; 
fcflush(); 
    $ph = compress('photos'); 
echo "Photo compression complete."; 
fcflush(); 
echo "Compressing all signatures now..."; 
fcflush(); 
    $sg = compress('signatures'); 
echo "Signature compression complete."; 
fcflush(); 
echo "Compressing all excel files now..."; 
fcflush(); 
    $excel = compress('uploads'); 
echo "Excel files compression complete.</div>"; 
fcflush(); 

也正好呼應了線直接ratehr比它們分配給$迴應則呼應的是。

+0

你明白了。瞭解我真正想要的是實時消息輸出,但是我嘗試了你的代碼,當瀏覽器被定向到這個php代碼後,點擊按鈕後,它再次聚集在一起,這次甚至沒有顯示任何東西。 – coder101

+0

只要您調用函數並且函數在您的代碼中,它就不應該這樣做。如果是,那麼你是否運行某種形式的緩存,或者你在代碼中的哪個位置設置了緩衝? fcflush()函數強制將緩衝區刷新到屏幕,並在處理時顯示實時外觀。 – Dave

+0

沒有戴夫,我沒有運行任何類型的緩存和功能是非常好的內部代碼,功能是在上面的代碼仍然執行功能,但沒有顯示任何東西,即使在一堆,即使在束,更不用說實時 – coder101

相關問題