2012-04-27 95 views
1

以下代碼我緩衝佈局文件。 在本地服務器上工作正常,但在服務器上它保持緩衝,直到php放棄。這會導致旋轉進度條和頁面中javascript的延遲執行。它看起來像ob_end_clean()不會真的退出緩衝。php緩衝區不會停止後ob_end_clean

ob_start(); 
require($layoutfile); 
$return = ob_get_contents(); 
ob_end_clean(); 
return $return; 

當我在刷新後回顯一個空格時,緩衝區停止並且所有東西都正常工作。但在這種情況下,我不會在屏幕上打印任何東西。

ob_start(); 
require($layoutfile); 
$return = ob_get_contents(); 
if(ob_end_clean()) echo " "; 
return $return; 

有人碰到過這個嗎?

+0

你試過用'ob_flush'嗎? – kuba 2012-04-27 14:59:00

+0

@Charles是的是一個錯字 – waterschaats 2012-04-27 15:04:36

+0

@kuba與'ob_flush'它刪除了'$ return'var – waterschaats 2012-04-27 15:04:54

回答

0

對於具有任何緩衝問題:

嘗試echo ob_get_level()您是哪一層看到的。如果此函數返回的結果多於0,那麼您仍在緩衝區內。

要關閉所有圖層的預防問題,請執行下列操作:

while (@ob_end_clean()) { 
    // do nothing 
} 

這將刪除所有圖層。

之後,您可以繼續前進 - 即使只有flush()而不是ob_flush()

你提到它適用於你的其他服務器。你有沒有像here激活gzip壓縮?

0

爲我工作得很好的代碼是:

<?php 

include "../connect/connectdb.php"; 

$txtIdCaso = $_GET['WWW_id_caso']; 

$sql = "SELECT * FROM caso_solicitud 
     WHERE id_caso = '".$txtIdCaso."'"; 


$result = mysqli_query($conn, $sql); 
$row = mysqli_fetch_array($result); 

header('Content-Description: File Transfer'); 
header('Content-type: "'.$row['tipo_archivo'].'"'); 
header('Content-Disposition: attachment; filename="'.$row['nombre_archivo'].'"'); 
header('Content-Transfer-Encoding: binary'); 
header('Expires: 0'); 
header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); 
header('Pragma: public'); 
header("Content-length: ".$row['longitud_archivo']); 

while (@ob_end_clean()) { 
// do nothing 
} 

die($row['doc_solicitud']); 
?> 

希望能有所幫助。我測試了幾種格式並且工作正常。

問候。

0

我猜是ob_end_clean之後有輸出。使用die/exit/header將正常工作(意味着HTML中沒有任何內容)。我遇到了類似的問題,但得到了解決方案。 輸出緩衝處理輸出到客戶端,該函數清除所有內容直到執行。