下载管理器中的php curl下载文件

时间:2011-10-13 17:38:14

标签: php curl download

我的文件输出有问题,它很小,比如大约4kb,文件说“400 - Bad Request”。

从源头来看,正确的大小是28.2​​mb。

$url = 'http://mozilla.isu.net.sa/firefox/releases/7.0.1/mac/en-US/Firefox%207.0.1.dmg';
$curl = curl_init(); 
curl_setopt($curl, CURLOPT_URL, $url);  
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_BINARYTRANSFER, 1); 
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 360);
curl_setopt($curl, CURLOPT_COOKIEJAR, 'temp/cookie.txt'); 
curl_setopt($curl, CURLOPT_COOKIEFILE, 'temp/cookie.txt');
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($curl, CURLOPT_HEADER, true);
curl_setopt($curl, CURLOPT_MAXREDIRS, 10);
curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.5) Gecko/20041107 Firefox/1.0');

$curl_out = curl_exec($curl);

curl_close($curl);

$filename = explode('/', $url);
$filename = $filename[count($filename)-1];

header('Content-Transfer-Encoding: binary');
header('Content-Disposition: attachment; filename="'.$filename.'"');

print($curl_out);

如果它无法处理更大的文件,其他方法:我想从带有cookie的php下载到源链接...那么如何?

2 个答案:

答案 0 :(得分:0)

不确定您要做什么,但从我看到的,您正在下载文件,然后让用户再次下载它,因此对于此链接的每个请求,您将不得不再次下载它。所以开销太大了。

这是一个更简单的解决方案:

<a href="http://mozilla.isu.net.sa/firefox/releases/7.0.1/mac/en-US/Firefox%207.0.1.dmg">Click here to download</a>

答案 1 :(得分:0)

使用浏览器下载文件,观察,复制和复制所有标题和cookie(使用篡改数据(firefox)查看标题)

并且为了下载文件,我建议你尝试这样的事情以及你已经完成的事情。

$url  = 'http://www.example.com/a-large-file.zip';
$path = '/path/to/a-large-file.zip';

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

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

$data = curl_exec($ch);

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

除此之外,我尝试了你的链接并直接下载,所以上面的代码就足够了。