2016-04-03 96 views
0

我正在嘗試使用PHP和cURL下載文件。我通過一系列cURL請求獲取了下載文件的URL。使用PHP下載文件問題

當我嘗試下載文件時,我得到一個空文件。請參閱相關的代碼如下:

... 
$output = curl_exec($ch); 
curl_close($ch); 
$regex = '/\b(https?|ftp|file):\/\/resources\.lendingclub\.com\/secure[-A-Z0-9+&@#\/%?=~_|$!:,.;]*[A-Z0-9+&@#\/%=~_|$]/i'; 
preg_match_all($regex, $output, $parts); 
$url3a = $parts[0][0]; 
OutputMsg($url3a); //print the content of $url3a 
DownloadFile($url3a, 'testfile.zip'); //downloads the file using a cURL request 
... 

這將創建零個字節文件testfile.zip。並輸出以下屏幕:

https://resources.lendingclub.com/secure/LoanStats3a_securev1.csv.zip?signature=cmu73mJsyNhznZMBH6B%2FsFjoNuE%3D&issued=1459663950631 

如果我添加一個線(見下文)

... 
$output = curl_exec($ch); 
curl_close($ch); 
$regex = '/\b(https?|ftp|file):\/\/resources\.lendingclub\.com\/secure[-A-Z0-9+&@#\/%?=~_|$!:,.;]*[A-Z0-9+&@#\/%=~_|$]/i'; 
preg_match_all($regex, $output, $parts); 
$url3a = $parts[0][0]; 
//line added below 
$url3a = 'https://resources.lendingclub.com/secure/LoanStats3a_securev1.csv.zip?signature=cmu73mJsyNhznZMBH6B%2FsFjoNuE%3D&issued=1459663950631'; 
OutputMsg($url3a); //print the content of $url3a 
DownloadFile($url3a, 'testfile.zip'); //downloads the file using a cURL request 
... 

文件被正確下載,屏幕輸出和以前一樣:

https://resources.lendingclub.com/secure/LoanStats3a_securev1.csv.zip?signature=cmu73mJsyNhznZMBH6B%2FsFjoNuE%3D&issued=1459663950631 

我不知道爲什麼上面的第一個例子不起作用,第二個例子。我做的唯一的事情就是輸入網址並將其分配給變量。

我可以提供更多的代碼,包括DownloadFile函數。

我還沒有想出一種方法來使它工作,而無需在源代碼中輸入url。

謝謝。

回答

0

我終於明白了這個問題。我在這裏發佈解決方案以供將來參考。

在我的第一次嘗試中,我得到了我想要下載的文件的URL,通過取消由cURL請求返回的html頁面來下載。

在我的第二次嘗試中,我直接在php源代碼中輸入了url。

當我同時回顯屏幕時,它們看起來完全一樣。

但是,在玩strlen和strpos之後,我意識到第一個url的「&」存儲爲「& amp」。兩者在我的屏幕上看起來完全一樣,但它們的存儲方式不同。

爲了解決這個問題,我更換了行:

$url3a = $parts[0][0]; 

$url3a = htmlspecialchars_decode($parts[0][0]); 

這htmlspecialchars_decode函數替換所有的 「&放大器」 定期 「&」。

我希望這可以幫助別人。

謝謝。