Quick Tips

Generando y descargando archivos enormes con PHP

|

Si bien hace un tiempo escribí sobre como Forzar la descarga de un archivo con PHP, lo cierto es que esto solamente funciona con archivos relativamente pequeños, de no más de 2 Megabytes de tamaño. Archivos más grandes (alrededor de cientos de Megabytes) se verían truncados o vacíos, simplemente porque PHP posee un espacio limitado para hacer output buffering.

Entonces, si quisiéramos extender el ejemplo anterior, pero teniendo en cuenta tamaños de archivo mucho más grandes, deberíamos realizar algo así:

1
2
3
4
5
6
7
8
9
$filename = 'archivo-xml-muy-grande.xml';

header('Content-type: text/xml');
header('Content-length: ' . filesize($filename));
header('Content-Disposition: attachment; filename="'.$filename.'"');

ob_end_flush();
readfile($filename);
exit;