web-dev-qa-db-ja.com

PHP)を使用してリモートファイルをサーバーにダウンロードします

私はこの2日間、あちこちを探していて、すべてを試しましたが、それでも何も機能しません。これは比較的簡単なことだと思います。

私がやりたいのは、URLからサーバー上のディレクトリにリモートファイルをダウンロードすることだけです。

だから、例えば、

_$_url = http://www.freewarelovers.com/Android/download/temp/1306495040_Number_Blink_1.1.1.apk
_

および_$_dir = /www/downloads/_

それからすべてが言われ、終わったら私は_1306495040_Number_Blink_1.1.1.apk_に_/www/downloads/_が欲しい

copy()関数を試しました、試しました

_file_put_contents("$_dir.$_file_name", file_get_contents($_url));
_

次のエラーが発生します。

file_get_contents(): failed to open stream: HTTP request failed!

9
Corey

これはそれを行う必要があります:

set_time_limit(0);

$url = 'http://www.freewarelovers.com/Android/download/temp/1306495040_Number_Blink_1.1.1.apk';
$file = fopen(dirname(__FILE__) . '/downloads/a.apk', 'w+');

$curl = curl_init();

// Update as of PHP 5.4 array() can be written []
curl_setopt_array($curl, [
    CURLOPT_URL            => $url,
//  CURLOPT_BINARYTRANSFER => 1, --- No effect from PHP 5.1.3
    CURLOPT_RETURNTRANSFER => 1,
    CURLOPT_FILE           => $file,
    CURLOPT_TIMEOUT        => 50,
    CURLOPT_USERAGENT      => 'Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)'
]);

$response = curl_exec($curl);

if($response === false) {
    // Update as of PHP 5.3 use of Namespaces Exception() becomes \Exception()
    throw new \Exception('Curl error: ' . curl_error($curl));
}

$response; // Do something with the response.
18
Sparkup
$url  = 'http://www.example.com/a-large-file.Zip';
$path = '/path/to/a-large-file.Zip';

$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$data = curl_exec($ch);

curl_close($ch);

file_put_contents($path, $data);

カールを使用します

$ urlはファイルのURLです

$ pathは、ファイルを保存する場所と名前です。

私はそれがうまくいくことを願っています

以下のように、curlを使用してリモートサーバーからファイルをダウンロードします。

$url = "http://path/toserver/filename";
$destination = "uploads/filename";    
$fp = fopen ($destination, 'w+');
  $ch = curl_init();
  curl_setopt( $ch, CURLOPT_URL, $url );
  curl_setopt( $ch, CURLOPT_BINARYTRANSFER, true );
  curl_setopt( $ch, CURLOPT_RETURNTRANSFER, false );
  curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, false );

  curl_setopt( $ch, CURLOPT_CONNECTTIMEOUT, 10 );
  curl_setopt( $ch, CURLOPT_FILE, $fp );
  curl_exec( $ch );
  curl_close( $ch );
  fclose( $fp );

参照 http://www.tricksofit.com/2014/04/download-file-from-remote-server-in-php

5
Harish Singh

file_put_contents ディレクトリ名ではなく、ファイル名が必要です。

4
ceejayoz

PHP 5.1.0なので、file_put_contents()は、$ dataパラメーターとしてストリームハンドルを渡すことにより、ピースごとの書き込みをサポートします:
Curlを使用する必要はありません

file_put_contents("Tmpfile.Zip", fopen("http://someurl/file.Zip", 'r'));
4
Kuldeep

それをさまざまな段階に分割します。

$raw = file_get_contents($_url);
... check if $raw has anything useful in it
file_put_contents($_dir, $raw);
... check if the file showed up

File_get_contentsでフェッチが失敗するか、file_put_contentsで書き込みが失敗するか、ダウンロードしているファイルが大きすぎてPHPのデフォルトのmemory_limitを超えています。

1
Marc B

検証あり...

ファイルが最初に存在するかどうかを検証します。

function doesUrlExists($url) {
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_NOBODY, true);
    curl_exec($ch);
    $code = curl_getinfo($ch, CURLINFO_HTTP_CODE);

    if($code == 200){
        $status = true;
    }else{
        $status = false;
    }
    curl_close($ch);
    return $status;
}

そして、ファイルの内容を入れます(laravelストレージクラス):

 if(!doesUrlExists($url_file)) {
     die('The remote file is not accessible. Please check the URL.');
 }

 Storage::disk('local')
          ->put($file_destintation, fopen($url_file, 'r'));
0
JuliSmz

Fopenラッパーが有効になっていない可能性があるため、file_get_contentsが機能しない可能性があります。 curl または Snoopy のようなライブラリを使用してみてください。

0
Nev Stokes