我的网站正在流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(); 行。
答案 0 :(得分:1)
因此,查看正在生成错误“ failed to flush buffer. No buffer to flush
的地方PHP source for ob_flush()
,如果没有活动的输出缓冲区,则似乎会生成错误。
基于PHP源代码,ob_end_flush()
永远不会导致该错误-不会,不会在代码中。您确定在代码中的某个地方没有ob_flush()
,并且没有包含在与我们分享的问题中吗?
无论如何,您不是在检查ob_start()
的返回值-它可能会失败,并且如果它无法创建新的输出缓冲区,则随后的ob_flush()
或ob_end_flush()
将之所以失败,是因为这些命令需要一个活动的输出缓冲区才能起作用,如果没有,则会发出错误。
您可以在PHP source for ob_end_flush()
中看到,当没有活动输出缓冲区时,它发出的错误是“ failed to delete and flush buffer. No buffer to delete or flush
”。