2011-10-13 39 views
0

我有一个文件输出的问题,它真的很小,像4kb左右,文件说“400 - 错误的请求”。php下载文件在下载管理器

来自源代码,正确的大小是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); 

如果它不能处理更大的文件,另一种方法:我想从PHP和饼干下载着源链接...然后怎么样?

+0

尝试vardumping curl_out并在文件检索中查找错误 – jancha

+0

u mean var_dump($ curl_out)? – user453089

+0

@jancha我试着'echo var_dump($ curl_out);'输出:'串(349) “<! - ?XML版本=” 1.0" 编码= “ISO-8859-1”? - > 400 - 错误的请求

400 - 错误要求

“ ' – user453089

回答

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> 
+0

不是..我只想用饼干卷曲.. – user453089

0

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

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

$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); 

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