Подтвердить что ты не робот

Скопировать файл с удаленного сервера или URL-адреса

У меня есть следующий код:

$file = 'http://3.bp.blogspot.com/-AGI4aY2SFaE/Tg8yoG3ijTI/AAAAAAAAA5k/nJB-mDhc8Ds/s400/rizal001.jpg';
$newfile = '/img/submitted/yoyo.jpg';

if ( copy($file, $newfile) ) {
    echo "Copy success!";
}else{
echo "Copy failed.";
}

и он всегда выводит "Копировать не удалось"

copy(/img/submitted/yoyo.jpg) [function.copy]: failed to open stream: No such file or directory

В моем каталоге установлено 777.

любые идеи? спасибо!

4b9b3361

Ответ 1

В то время как copy() будет принимать URL-адрес в качестве исходного аргумента, он может иметь проблемы с URL-адресом для адресата.

Вы пытались указать полный путь файловой системы к выходному файлу? Я предполагаю, что вы не пытаетесь поместить новый файл на удаленный сервер.

Например:

$file = 'http://3.bp.blogspot.com/-AGI4aY2SFaE/Tg8yoG3ijTI/AAAAAAAAA5k/nJB-mDhc8Ds/s400/rizal001.jpg';
$newfile = $_SERVER['DOCUMENT_ROOT'] . '/img/submitted/yoyo.jpg';

if ( copy($file, $newfile) ) {
    echo "Copy success!";
}else{
    echo "Copy failed.";
}

Выше было хорошо для меня.

Ответ 2

Я нашел эту функцию в одном из моих старых проектов.

private function download_file ($url, $path) {

  $newfilename = $path;
  $file = fopen ($url, "rb");
  if ($file) {
    $newfile = fopen ($newfilename, "wb");

    if ($newfile)
    while(!feof($file)) {
      fwrite($newfile, fread($file, 1024 * 8 ), 1024 * 8 );
    }
  }

  if ($file) {
    fclose($file);
  }
  if ($newfile) {
    fclose($newfile);
  }
 }

Ответ 3

Если файл не является общедоступным, вы не можете скопировать файл с сервера без доступа к нему.

Вы можете использовать ftp_get(), чтобы открыть FTP-соединение и скопировать файл.

$local_file = 'localname.zip'; // the nam
$server_file = 'servername.zip';
$conn = ftp_connect($ftp_server);

$login_result = ftp_login($conn, $ftp_user_name, $ftp_user_pass);

if (ftp_get($conn, $local_file, $server_file, FTP_BINARY)) {
    echo "Successfully copied";
}
ftp_close($conn);

Но, если вы хотите загрузить файл с URL-адреса

$fullPath = "filepath.pdf";

if ($fd = fopen ($fullPath, "r")) {
    $fsize = filesize($fullPath);
    $path_parts = pathinfo($fullPath);
    $ext = strtolower($path_parts["extension"]);
    header("Content-type: application/octet-stream");
    header("Content-Disposition: filename=\"".$path_parts["basename"]."\"");
    header("Content-length: $fsize");
    header("Cache-control: private"); //use this to open files directly
    while(!feof($fd)) {
        $buffer = fread($fd, 2048);
        echo $buffer;
    }
}
fclose ($fd);