web-dev-qa-db-fra.com

Besoin d'un script php pour télécharger un fichier sur un serveur distant et sauvegarder localement

Essayer de télécharger un fichier sur un serveur distant et de l’enregistrer dans un sous-répertoire local.

Le code suivant semble fonctionner pour les petits fichiers, <1 Mo, mais les fichiers plus volumineux arrivent à expiration et ne sont même pas téléchargés.

<?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);

?>

Des suggestions sur la façon de télécharger des fichiers plus volumineux sans interruption?

17
bigLarry
$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
Parris Varney

file_get_contents ne devrait pas être utilisé pour les gros fichiers binaires car vous pouvez facilement atteindre la limite de mémoire de PHP. Je voudrais exec()wget en lui indiquant l'URL et le nom du fichier de sortie souhaité:

exec("wget $url -O $filename");
5
Blagovest Buyukliev

Depuis PHP 5.1.0, file_put_contents () prend en charge l'écriture pièce par pièce en transmettant un descripteur de flux comme paramètre $ data:

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

J'utilise toujours ce code, ça marche très bien.

<?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
Hbirjand

Utilisez cette solution si vous ne connaissez pas le format du fichier que vous allez télécharger. 

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

Un script meilleur et plus léger qui est un fichier en streaming:

<?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
Saeed Sepehr

Essayez phpRFT: http://sourceforge.net/projects/phprft/files/latest/download?source=navbar

Il a progress_bar et detactor simple nom de fichier ...

0
aditya4447