0

我在任何地方都找不到任何解决方案。

我有一个文件,它为 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 limittime limit但它没有帮助。

PS 我不能使用 Apachexsendfile等模块。

我需要一个解决方案,readfile()这样它就不会开始在内存中加载文件,然后将其发送到闪存以再次读取它,然后开始流式传输。

4

2 回答 2

3

尝试这个:

$handle = fopen($file, "rb");
while (!feof($handle)) {
  echo fread($handle, 32 * 1024);
}
fclose($handle);

readfile()将尝试将文件的全部内容加载到内存中。fread()相反,您可以一次读取一小块。

于 2013-01-16T20:17:07.883 回答
0

另一个可能导致 PHP 提供的大文件出现问题的事情是,浏览器倾向于只下载文件的一部分,然后再返回以获取更多内容,以避免在可能不需要时一次下载所有内容,有看看https://stackoverflow.com/a/4451376/1951649 - 这将使您的 php 应用程序处理这些请求

于 2013-01-16T20:27:15.023 回答