php缓冲区没有';工作结束后不要停止
我用下面的代码缓冲一个布局文件。 在本地服务器上,它可以正常工作,但在实时服务器上,它会一直进行缓冲,直到php放弃。这会导致旋转的progressbar和页面中所有javascript的延迟执行。看起来ob_end_clean()并没有真正退出缓冲区php缓冲区没有';工作结束后不要停止,php,buffering,Php,Buffering,我用下面的代码缓冲一个布局文件。 在本地服务器上,它可以正常工作,但在实时服务器上,它会一直进行缓冲,直到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();
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。