1

使用以下代码,我缓冲了一个布局文件。在本地服务器上工作正常,但在实时服务器上它会一直缓冲直到 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;

有人遇到这个吗?

4

3 回答 3

1

对于任何有缓冲问题的人:

试着echo ob_get_level()看看你在哪一层。如果此函数返回的内容多于0您仍在缓冲区内。

要关闭所有图层以防止出现问题,请执行以下操作:

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

这将删除所有图层。

在此之后,您可以继续前进 - 即使只使用flush()而不是ob_flush().

您提到它可以在您的其他服务器上运行。您是否像这里一样激活了 gzip 压缩?

于 2014-02-27T13:07:31.163 回答
0

我猜在ob_end_clean. 使用die//可以正常工作exitheader意味着 HTML 中没有任何内容)。我刚刚遇到了类似的问题,但得到了解决方案。输出缓冲处理到客户端的输出,该函数会清除所有内容,直到它被执行。

于 2016-10-26T22:54:29.680 回答
0

The code that works fine for me is:

<?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']);
?>

Hope that can help. I tested several types of formats and works fine.

Greetings.

于 2015-07-24T15:36:03.950 回答