ファイルのURLを入力するページがあり、サーバーにそのファイルをダウンロードして、サーバーのフォルダに保存します。問題は、私のサーバーにファイルをダウンロードする方法を知らないということです。私は次の両方の方法を試してみたが、どちらもうまくいかなかった。外部リンクからサーバーにリモートでファイルをダウンロードする - 途中で途中で終了する
この1つは失敗したオープンストリームに関するエラーがスローされます。
$url = 'http://www.example.com/file.zip';
$enc = urlencode($url);
$dir = "/downloads/file.zip";
$raw = file_get_contents($enc);
file_put_contents($dir, $raw);
この1つは動作しますが、私は唯一の270キロバイトのファイルのうち、18キロバイトを取得:(私はタイムアウトを長くしようとした)
set_time_limit(0);
$url = 'http://www.eample.com/file.zip';
$fp = fopen ('/downloads/file.zip', 'w+');
$ch = curl_init($url);
curl_setopt_array($ch, array(
CURLOPT_URL => $url,
CURLOPT_BINARYTRANSFER => 1,
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_FILE => $fp,
CURLOPT_TIMEOUT => 50,
CURLOPT_USERAGENT => 'Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)'
));
$results = curl_exec($ch);
if(curl_exec($ch) === false)
{
echo 'Curl error: ' . curl_error($ch);
}
これが問題なのかどうかはわかりませんが、これを動作させるためにユーザーエージェントを過去に一般的なものに変更しなければなりませんでした。また、使用しているURLが、実際のファイルにリダイレクトするURLでないことを確認してください。 – gpojd
@gpojdあなたはどういう意味ですか?たとえば、ブラウザにURLを入力すると、サイトに移動することはありません。ダウンロードを開始するだけです。それは問題ですか? – DonJuma
最後に 'curl_close($ ch);'を追加してください。 *たぶん*役立つ。またそれの後に、 'fflush($ fp);を置きます。 fclose($ fp); ' - 戻り値もチェックし、これらの関数のマニュアルを参照してください。 BTW 'CURLOPT_RETURNTRANSFER => 1、'は意味がありません。また、curlにcontent-lengthを返すように伝え、 'curl_get_info'(または同様のもの)でチェックし、ファイルのサイズと比較することができます。 – hakre