2012-04-27 115 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中没有任何内容)。我遇到了类似的问题,但得到了解决方案。 输出缓冲处理输出到客户端,该函数清除所有内容直到执行。