Скачать удаленный файл на сервер с PHP - PullRequest
7 голосов
/ 14 июня 2011

Последние два дня я искал повсюду и пробовал все, но до сих пор не могу заставить что-либо работать. Я чувствую, что это должно быть относительно простым делом.

Все, что я хочу сделать, это загрузить удаленный файл с 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!

Ответы [ 8 ]

15 голосов
/ 14 июня 2011

Это должно сделать это:

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.
14 голосов
/ 15 января 2013
$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);

используется curl

$ url - это URL файла

$ путь - это где и имя для сохранения файла

Я надеюсь, что это работает

5 голосов
/ 24 августа 2014

Используйте 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

4 голосов
/ 14 июня 2011

file_put_contents ожидает имя файла, а не имя каталога.

3 голосов
/ 09 июня 2016

Начиная с PHP 5.1.0, file_put_contents () поддерживает запись по частям, передавая дескриптор потока в качестве параметра $ data:
Нет необходимости использовать Curl

file_put_contents("Tmpfile.zip", fopen("http://someurl/file.zip", 'r'));
1 голос
/ 14 июня 2011

Разделите его на несколько этапов:

$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.

0 голосов
/ 03 июля 2019

С проверками ...

Проверить, если файл существует первым:

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 голосов
/ 14 июня 2011

Возможно, вы не включили упаковщики fopen, поэтому file_get_contents может не работать.Попробуйте использовать curl или такую ​​библиотеку, как Snoopy .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...