Bueno, este parece bastante simple, y lo es. Todo lo que tiene que hacer para descargar un archivo a su servidor es:
file_put_contents("Tmpfile.zip", file_get_contents("http://someurl/file.zip"));
Solo hay un problema. ¿Qué pasa si tiene 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 manera, puedo descargar archivos más grandes, sin tener problemas de memoria.
Respuestas:
Desde PHP 5.1.0,
file_put_contents()
admite escribir pieza por pieza pasando un identificador de flujo como$data
parámetro:Del manual:
(Gracias Hakre )
fuente
allow_fopen_url Off
está configurado en php.ini (buena idea para la seguridad), su secuencia de comandos se rompería.file_get_contents()
que tampoco funcionaría si ese fuera el caso (ver OP).fopen
; evita efectos adversos a las imágenes y otros archivos de texto no planos.fuente
Intenta usar cURL
No estoy seguro, pero creo que con la
CURLOPT_FILE
opción que escribe mientras extrae los datos, es decir. No tamponado.fuente
$fh = fopen('/path/to/download/the/file/to.zip', 'w');
y cierre confclose($fh);
aftercurl_close($ch);
. Y listoCURLOPT_FILE => $fh
La respuesta de prodigitalson no funcionó para mí. Tengo
missing fopen in CURLOPT_FILE
más detalles .Esto funcionó para mí, incluidas las URL locales:
fuente
.php
archivo y ejecútelo en el servidor de destinoDescargador:
fuente
set_time_limit (24 * 60 * 60);
tiene que ser puesto dentro de un bucle. No tiene ningún efecto al comienzo del guión.fuente
Hay 3 formas:
Puedes encontrar ejemplos desde aquí .
fuente
Use un método simple en php
copy()
Nota: si el archivo de destino ya existe, se sobrescribirá
Función PHP copy ()
Nota: debe establecer el permiso 777 para la carpeta de destino. Use este método cuando realice descargas en su máquina local.
Nota especial: 777 es un permiso en un sistema basado en Unix con permiso completo de lectura / escritura / ejecución para el propietario, el grupo y todos. En general, otorgamos este permiso a los activos que no son muy necesarios para ocultarse del público en un servidor web. Ejemplo: carpeta de imágenes.
fuente
Lo uso para descargar el archivo
fuente
Una solución PHP 4 y 5:
readfile () no presentará ningún problema de memoria, incluso al enviar archivos grandes, por sí solo. Se puede usar una URL como nombre de archivo con esta función si se han habilitado los contenedores fopen.
http://php.net/manual/en/function.readfile.php
fuente