Нужен php скрипт для загрузки файла на удаленный сервер и сохранения локально


Попытка загрузить файл на удаленный сервер и сохранить его в локальном подкаталоге.

Следующий код, похоже, работает для небольших файлов, <1 МБ, но большие файлы просто истекают по времени и даже не начинают загружаться.

<?php

 $source = "http://someurl.com/afile.zip";
 $destination = "/asubfolder/afile.zip";

 $data = file_get_contents($source);
 $file = fopen($destination, "w+");
 fputs($file, $data);
 fclose($file);

?>

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

Author: animuson, 2010-12-22

7 answers

$ch = curl_init();
$source = "http://someurl.com/afile.zip";
curl_setopt($ch, CURLOPT_URL, $source);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$data = curl_exec ($ch);
curl_close ($ch);

$destination = "/asubfolder/afile.zip";
$file = fopen($destination, "w+");
fputs($file, $data);
fclose($file);
 32
Author: Parris Varney, 2010-12-21 21:53:11

file_get_contents не следует использовать для больших двоичных файлов, потому что вы можете легко достичь предела памяти PHP. Я бы так и сделал exec() wget сообщив ему URL-адрес и желаемое выходное имя файла:

exec("wget $url -O $filename");
 5
Author: Blagovest Buyukliev, 2010-12-21 21:50:29

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

file_put_contents("Tmpfile.zip", fopen("http://someurl/file.zip", 'r'));
 3
Author: Kuldeep, 2016-06-09 12:29:53

Я всегда использую этот код, он работает очень хорошо.

<?php
define('BUFSIZ', 4095);
$url = 'Type The URL Of The File';
$rfile = fopen($url, 'r');
$lfile = fopen(basename($url), 'w');
while(!feof($rfile))
fwrite($lfile, fread($rfile, BUFSIZ), BUFSIZ);
fclose($rfile);
fclose($lfile);
?>     
 1
Author: Hbirjand, 2014-11-28 06:00:19

Используйте это решение, если вы не знаете формат файла, который собираетесь загрузить.

$url = 'http:://www.sth.com/some_name.format' ;
$parse_url = parse_url($url) ;
$path_info = pathinfo($parse_url['path']) ;
$file_extension = $path_info['extension'] ;
$save_path = 'any/local/path/' ;
$file_name = 'name' . "." . $file_extension ;
file_put_contents($save_path . $file_name , fopen($url, 'r'))
 1
Author: Salar, 2016-02-12 15:06:44

Попробуйте phpRFT:http://sourceforge.net/projects/phprft/files/latest/download?источник= панель навигации

У него есть progress_bar и простой определитель имени файла...

 0
Author: aditya4447, 2015-07-10 20:27:37

Лучший и более легкий скрипт, который является потоковым файлом:

<?php

$url  = 'http://example.com/file.zip'; //Source absolute URL
$path = 'file.zip'; //Patch & file name to save in destination (currently beside of PHP script file)

$fp = fopen($path, 'w');

$ch = curl_init($url);
curl_setopt($ch, CURLOPT_FILE, $fp);

$data = curl_exec($ch);

curl_close($ch);
fclose($fp);

?>
 0
Author: Saeed Sepehr, 2018-01-10 15:31:24