无法刷新缓冲区。没有要用 ob_end_flush() 方法刷新的缓冲区
failed to flush buffer. No buffer to flush with ob_end_flush() method
我的网站正在播放 mp3 文件,我间歇性地在日志文件中看到通知错误:
Notice: failed to flush buffer. No buffer to flush in
代码如下:
$filename = 'audio.mp3';
header("Content-Type: audio/mpeg");
header("Content-Length: ".filesize($filename));
header('Content-Disposition: inline; filename="' . $filename);
header("X-Pad: avoid browser bug");
header("Cache-Control: no-cache");
ob_clean();
flush();
set_time_limit(0);
$size = filesize($filename);
$chunksize = 1 * (1024 * 1024);
if ($size > $chunksize) {
$handle = fopen($filename, 'rb');
$buffer = '';
while (!feof($handle)) {
$buffer = fread($handle, $chunksize);
ob_start();
echo $buffer;
ob_end_flush();
flush();
}
fclose($handle);
} else {
readfile($filename);
}
错误总是指 ob_end_flush(); 行。
因此,查看 PHP source for ob_flush()
,这是生成“failed to flush buffer. No buffer to flush
”错误的地方,如果没有活动的输出缓冲区,似乎会生成错误。
根据 PHP 来源,ob_end_flush()
永远不会导致该错误 - 它不会,它不在代码中。您确定在您的代码中没有包含在您与我们分享的问题中的 ob_flush()
吗?
无论如何,您没有检查 ob_start()
的 return 值 - 它可能会失败,如果它无法创建新的输出缓冲区,那么随后的 ob_flush()
或ob_end_flush()
将失败,因为这些命令需要一个活动的输出缓冲区才能运行,如果没有,它们将发出错误。
您可以在 PHP source for ob_end_flush()
中看到,当没有活动输出缓冲区时它发出的错误是“failed to delete and flush buffer. No buffer to delete or flush
”。
我的网站正在播放 mp3 文件,我间歇性地在日志文件中看到通知错误:
Notice: failed to flush buffer. No buffer to flush in
代码如下:
$filename = 'audio.mp3';
header("Content-Type: audio/mpeg");
header("Content-Length: ".filesize($filename));
header('Content-Disposition: inline; filename="' . $filename);
header("X-Pad: avoid browser bug");
header("Cache-Control: no-cache");
ob_clean();
flush();
set_time_limit(0);
$size = filesize($filename);
$chunksize = 1 * (1024 * 1024);
if ($size > $chunksize) {
$handle = fopen($filename, 'rb');
$buffer = '';
while (!feof($handle)) {
$buffer = fread($handle, $chunksize);
ob_start();
echo $buffer;
ob_end_flush();
flush();
}
fclose($handle);
} else {
readfile($filename);
}
错误总是指 ob_end_flush(); 行。
因此,查看 PHP source for ob_flush()
,这是生成“failed to flush buffer. No buffer to flush
”错误的地方,如果没有活动的输出缓冲区,似乎会生成错误。
根据 PHP 来源,ob_end_flush()
永远不会导致该错误 - 它不会,它不在代码中。您确定在您的代码中没有包含在您与我们分享的问题中的 ob_flush()
吗?
无论如何,您没有检查 ob_start()
的 return 值 - 它可能会失败,如果它无法创建新的输出缓冲区,那么随后的 ob_flush()
或ob_end_flush()
将失败,因为这些命令需要一个活动的输出缓冲区才能运行,如果没有,它们将发出错误。
您可以在 PHP source for ob_end_flush()
中看到,当没有活动输出缓冲区时它发出的错误是“failed to delete and flush buffer. No buffer to delete or flush
”。