Tratando de descargar un archivo en un servidor remoto y guardarlo en un subdirectorio local.

El siguiente código parece que funciona para archivos pequeños, < 1 MB, pero para archivos más grandes sólo el tiempo y ni siquiera comenzar a descargar.

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

?>

Cualquier sugerencia acerca de cómo descargar archivos de gran tamaño sin interrupción?

  • ¿Has probado CURL?
  • Gracias por su respuesta. No tengo rizo en el sistema de alojamiento de la secuencia de comandos.
InformationsquelleAutor bigLarry | 2010-12-21

7 Comentarios

  1. 32
    $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);
    • Gracias. Estoy tratando ahora, pero parece que el navegador se bloquea.
    • tienes que esperar a que el archivo de descarga, el navegador podría bloquearse hasta que finaliza la descarga. Pruebe con un tamaño medio de archivo que va a terminar más rápido, pero es lo suficientemente grande para golpear el tiempo de espera
    • Para un mayor uso de los archivos de este http://stackoverflow.com/a/3938564/1057527
    • Mejor una línea de solución a continuación: stackoverflow.com/a/37726077/179571
    • Cuando ejecuto este me sale el archivo para mostrar, pero con un tamaño de 0KB. Otros métodos a los que me dan mala dirección de errores o 502 problemas de Puerta de enlace. Alguna idea?
  2. 5

    file_get_contents no debe ser utilizado para grandes archivos binarios porque usted puede fácilmente alcanzar el límite de memoria de PHP. Me gustaría exec() wget diciendo que la dirección URL y el nombre de archivo de salida:

    exec("wget $url -O $filename");
    • Gracias. Voy a probar eso.
    • Es muy útil en los hosts que soporte SSH. Sólo si usted quiere conseguir algunos de archivos de servidor remoto a otro servidor wget http://public-url-of-the-file
  3. 5

    A partir de PHP 5.1.0, file_put_contents() admite la escritura, pieza por pieza, pasando una corriente de mango como el de $parámetro de datos:

    file_put_contents("Tmpfile.zip", fopen("http://someurl/file.zip", 'r'));
    • Esta es una estupenda solución funciona rápido y simple – GRACIAS!
  4. 2

    Yo siempre uso este código,que está funcionando muy 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);
    ?>     
    • siguiente nivel de respuesta
  5. 1

    Utilizar esta solución si usted no sabe el formato del archivo que vas a descargar.

    $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'))
  6. 0

    Una mejor y más ligero script que es el streaming de archivo:

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

Dejar respuesta

Please enter your comment!
Please enter your name here