我无法在任何地方找到任何解决方案。
我有一个文件输出flash播放器的mp4文件,如下所示:
^^^/stream/NtPXRMmGjJd47423
我有这个/ stream的代码:
^^^
$file = str_replace('/','\\',DOC_ROOT_STREAM."/".$path);
header('Last-Modified: Thu, 23 Sep 2010 02:00:02 GMT');
header('Content-Length: ' . filesize($file));
header('Connection: close');
header('Content-Type: video/mp4');
readfile($file);
exit;
这适用于小文件,但不适用于大文件。
我检查过网址是否正确。
我尝试更改memory limit
和time limit
,但这没有帮助。
P.S。我不能使用像xsendfile
等
我需要readfile()
的解决方案,以便它不会开始在内存中加载文件然后再将其发送到闪存再次读取它然后开始流式传输。
答案 0 :(得分:3)
试试这个:
$handle = fopen($file, "rb");
while (!feof($handle)) {
echo fread($handle, 32 * 1024);
}
fclose($handle);
readfile()
将尝试将文件的全部内容加载到内存中。您可以使用fread()
一次阅读一小块。
答案 1 :(得分:0)
另一件可能导致PHP提供大文件问题的事情是,浏览器往往只下载文件的一部分然后再返回更晚,以节省必须立即下载所有内容甚至可能不需要看看https://stackoverflow.com/a/4451376/1951649 - 这会让你的php应用程序处理这些请求