2016-04-03 4 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 

私は上記の最初の例がうまくいかず、2番目の例がうまくいかない理由で紛失しています。私がしたのは、urlを入力して変数に代入することだけでした。

私は、DownloadFile関数を含め、より多くのコードを提供できます。

ソースコードにURLを入力しなくても動作させる方法を見つけられませんでした。

ありがとうございました。

答えて

0

私はついにこの問題を理解しました。私は将来の参照のためにここにソリューションを掲載しています。

私の最初の試みでは、私は、cURLリクエストによって返されたhtmlページを破棄してダウンロードしたいファイルのURLを取得していました。

私の2回目の試行では、私はPHPのソースコードにURLを直接入力しました。

私は両方の画面にエコーしたとき、まったく同じように見えました。

しかし、strlenとstrposを再生した後、私は最初のURLに "&"が "& amp"と格納されていることを認識しました。どちらも画面上で全く同じように見えましたが、別々に保存されていました。

は私がライン交換し、問題を解決するには、次の

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

このhtmlspecialchars_decode機能を

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

を定期的に "&" で、すべての "&アンプ" を置き換えます。

私はこれが他の人に役立つことを願っています。

ありがとうございました。

関連する問題