PHP用cURL下载一个巨大的电影文件(500 MB)

时间:2012-06-09 04:05:56

标签: php curl download large-files

好的,我有一个问题,希望你能帮我解决。

我正在运行一个存储视频文件的服务器,这些文件非常大,有些高达650 MB。我需要用户能够请求此页面并将文件下载到他们的计算机上。我已经尝试了所有的东西,但是一个普通的readfile()请求在退出之前会挂起大约90秒并且给我一个“没有数据收到错误324代码”,我从几个网站找到的一个chunked readfile脚本甚至没有开始下载,FTP通过PHP解决方案什么也没做,但在我试图获取文件时给我错误,我发现的唯一cURL解决方案只是在我的服务器上创建另一个文件。那不是我需要的。

要清楚我需要用户才能文件下载 他们的计算机 和< strong>不是服务器。

我不知道这段代码是垃圾还是只需要一两个调整,但是感谢任何帮助!

<?php

$fn = $_GET["fn"];

echo $fn."<br/>";

$url  = $fn;
$path = "dl".$fn;

$fp = fopen($path, 'w');

$ch = curl_init($url);
curl_setopt($ch, CURLOPT_FILE, $fp);

$data = curl_exec($ch);

curl_close($ch);
fclose($fp);

?>

3 个答案:

答案 0 :(得分:4)

我不建议使用PHP或任何其他脚本技术来提供大型二进制文件。他们从来没有为此设计 - 你可以使用apache,nginx或后端的任何标准http服务器。如果您仍然需要使用PHP,那么您应该查看readfile_chunked。

http://php.net/readfile#48683 这是一个很棒的教程。 http://teddy.fr/blog/how-serve-big-files-through-php

祝你好运。

答案 1 :(得分:0)

readfile()没有缓冲区。但是,php本身可能会缓冲。关闭缓冲

while (ob_get_level())
    ob_end_clean();
readfile($file);

您的网络服务器可能会缓冲。把它关掉。你如何做到这取决于网络服务器,以及为什么它的缓冲。

答案 2 :(得分:0)

我发现可能发生两个问题:

  • 首先:您的Web服务器可能会因超时而关闭连接。你应该看看web服务器配置。
  • 第二:卷曲超时。我建议您查看this帖子。