php缓冲区没有';工作结束后不要停止

php缓冲区没有';工作结束后不要停止,php,buffering,Php,Buffering,我用下面的代码缓冲一个布局文件。 在本地服务器上,它可以正常工作,但在实时服务器上,它会一直进行缓冲,直到php放弃。这会导致旋转的progressbar和页面中所有javascript的延迟执行。看起来ob_end_clean()并没有真正退出缓冲区 ob_start(); require($layoutfile); $return = ob_get_contents(); ob_end_clean(); return $return; 当我在刷新后回显一个空格时,缓冲区停止,一切正常。但在

我用下面的代码缓冲一个布局文件。 在本地服务器上,它可以正常工作,但在实时服务器上,它会一直进行缓冲,直到php放弃。这会导致旋转的progressbar和页面中所有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;

有人遇到过这种情况吗?

对于有缓冲区问题的人:

尝试
echo ob\u get\u level()
查看您所在的层。如果此函数返回的值大于
0
,则仍在缓冲区内

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

while (@ob_end_clean()) {  
    // do nothing   
}
这将删除所有层

在此之后,您可以继续移动-即使只使用
flush()
而不是
ob\u flush()


您提到它可以在其他服务器上工作。你有gzip压缩激活像吗

对于存在缓冲区问题的任何人:

尝试
echo ob\u get\u level()
查看您所在的层。如果此函数返回的值大于
0
,则仍在缓冲区内

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

while (@ob_end_clean()) {  
    // do nothing   
}
这将删除所有层

在此之后,您可以继续移动-即使只使用
flush()
而不是
ob\u flush()


您提到它可以在其他服务器上工作。你有gzip压缩激活像吗

适合我的代码是:

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

适合我的代码是:

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

我猜在
ob\u end\u clean
之后会有输出。使用
die
/
退出
/
标题
可以正常工作(意味着HTML中没有任何内容)。我刚刚遇到了类似的问题,但得到了解决方案。
输出缓冲处理到客户端的输出,函数会清理所有内容,直到执行为止。

我猜在
ob\u end\u clean
之后会有输出。使用
die
/
退出
/
标题
可以正常工作(意味着HTML中没有任何内容)。我刚刚遇到了类似的问题,但得到了解决方案。
输出缓冲处理到客户端的输出,该函数将清除所有内容,直到执行为止。

您是否尝试过使用
ob\u flush
?@kuba与'ob\u flush'一起使用,它会删除'$return'变量。作为测试,是否更换
ob_end_clean()使用
if(ob_get_level())而(@ob_end_clean())允许脚本正常工作吗?@webbiedave不,不工作。这可能与服务器配置有关吗?在其他服务器和本地服务器上,它工作正常!我不确定。我唯一想到的是检查服务器上的PHP版本是否有任何错误,尝试打开/关闭web服务器中的压缩,检查Apache。您是否尝试过使用
ob_flush
?@kuba和“ob_flush”它删除了“$return”变量。作为测试,是否更换
ob_end_clean()使用
if(ob_get_level())而(@ob_end_clean())允许脚本正常工作吗?@webbiedave不,不工作。这可能与服务器配置有关吗?在其他服务器和本地服务器上,它工作正常!我不确定。只有在服务器上检查PHP版本是否有任何错误,尝试在web服务器上打开/关闭压缩,检查Apache。