[Php] Descargar archivo al servidor desde la URL



Answers

private function downloadFile($url, $path)
{
    $newfname = $path;
    $file = fopen ($url, 'rb');
    if ($file) {
        $newf = fopen ($newfname, 'wb');
        if ($newf) {
            while(!feof($file)) {
                fwrite($newf, fread($file, 1024 * 8), 1024 * 8);
            }
        }
    }
    if ($file) {
        fclose($file);
    }
    if ($newf) {
        fclose($newf);
    }
}
Question

Bueno, este parece bastante simple, y lo es. Todo lo que tienes que hacer para descargar un archivo a tu servidor es:

file_put_contents("Tmpfile.zip", file_get_contents("http://someurl/file.zip"));

Solo hay un problema. ¿Qué sucede si tienes un archivo grande, como 100mb? Luego, se quedará sin memoria y no podrá descargar el archivo.

Lo que quiero es una forma de escribir el archivo en el disco mientras lo descargo. De esa forma, puedo descargar archivos más grandes, sin tener problemas de memoria.




Una solución de PHP 4 y 5:

readfile () no presentará ningún problema de memoria, incluso al enviar archivos de gran tamaño, por sí mismo. Una URL se puede usar como un nombre de archivo con esta función si se han habilitado los wrappers fopen.

http://php.net/manual/en/function.readfile.php




Use un método simple en php copy()

copy($source_url, $local_path_with_file_name);

Nota: si el archivo de destino ya existe, se sobrescribirá

Función PHP copy ()

Nota especial: no olvides establecer el permiso 777 para la carpeta de destino




set_time_limit(0); 
$file = file_get_contents('path of your file');
file_put_contents('file.ext', $file);



  1. Crea una carpeta llamada "descargas" en el servidor de destino
  2. Guarde [este código] en el archivo .php y ejecútelo en el servidor de destino

Downloader:

<html>
<form method="post">
<input name="url" size="50" />
<input name="submit" type="submit" />
</form>
<?php
    // maximum execution time in seconds
    set_time_limit (24 * 60 * 60);

    if (!isset($_POST['submit'])) die();

    // folder to save downloaded files to. must end with slash
    $destination_folder = 'downloads/';

    $url = $_POST['url'];
    $newfname = $destination_folder . basename($url);

    $file = fopen ($url, "rb");
    if ($file) {
      $newf = fopen ($newfname, "wb");

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

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

    if ($newf) {
      fclose($newf);
    }
?>
</html> 



Links