使用以下代码缓冲布局文件。 在本地服务器上工作正常,但在实时服务器上它保持缓冲,直到PHP放弃。这会导致旋转进度条和页面中javascript的延迟执行。看起来像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 :(得分:0)
对于有缓冲问题的人:
尝试echo ob_get_level()
查看您所在的图层。如果此函数返回的值超过0
,则表示您仍在缓冲区内。
要关闭所有图层以防止出现问题,请执行以下操作:
while (@ob_end_clean()) {
// do nothing
}
这将删除所有图层。
在此之后,您可以继续前进 - 即使只使用flush()
代替ob_flush()
。
您提到它适用于您的其他服务器。您是否像here一样激活了gzip压缩?
答案 1 :(得分: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']);
?>
希望能有所帮助。我测试了几种格式并且工作正常。
问候。
答案 2 :(得分:0)
我猜在ob_end_clean
之后有输出。使用die
/ exit
/ header
可以正常工作(意味着HTML中没有任何内容)。我遇到了类似的问题,但得到了解决方案。
输出缓冲处理输出到客户端,该函数清除所有内容直到执行。