He visto muchas preguntas sobre cómo usar PHP de manera eficiente para descargar archivos en lugar de permitir solicitudes HTTP directas (para mantener los archivos seguros, realizar un seguimiento de las descargas, etc.).¿Por qué readfile() agota la memoria PHP?
La respuesta casi siempre es PHP readfile().
- Downloading large files reliably in PHP
- How to force download of big files without using too much memory?
- Best way to transparently log downloads?
PERO, aunque funciona muy bien durante las pruebas con archivos de gran tamaño, cuando está en un sitio vivo con cientos de usuarios, descargas comienzan a colgar y PHP los límites de memoria están agotados
¿De qué se trata cómo funciona readfile()
que hace que la memoria explote tanto cuando hay mucho tráfico? Pensé que se suponía que debía evitar el uso intensivo de la memoria PHP escribiendo directamente en el búfer de salida.
EDIT: (. Para aclarar, estoy buscando un "por qué", no "¿qué puedo hacer" Creo que mod_xsendfile de Apache es la mejor manera de eludir)
¿Tiene búferes de salida de PHP en (a través de 'ob_start()')? Si es así, PHP atrapará el contenido del archivo y causará problemas de memoria. – ceejayoz
Usando el ejemplo en el documento PHP enlazado, no lo hago - Tengo ob_clean(); enjuagar(); readfile ($ archivo); – tmsimont