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?
$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);
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");
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'));
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);
?>
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'))
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);
?>
Essayez phpRFT: http://sourceforge.net/projects/phprft/files/latest/download?source=navbar
Il a progress_bar et detactor simple nom de fichier ...