2011-10-13 82 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); 

除此之外,我試過你的鏈接並直接下載,所以上面的代碼應該足夠了。