2012-02-27 6 views

Respuesta

42

Puede usar una grabadora para guardar en el disco o guardarla en php: // output. Si es el último, podría usar el almacenamiento en búfer de salida para capturar ese resultado y luego almacenar en una variable ... sin embargo, no estoy seguro del motivo por el que querría hacer esto.

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); 
ob_start(); 
$objWriter->save('php://output'); 
$excelOutput = ob_get_clean(); 
+3

Gracias. Si estoy usando esto dentro de un framework como Symfony, podría necesitar pasar el contenido de un servicio Excel a algún tipo de servicio de salida o controlador. Prefiero evitar el golpe de escribir en el disco. – Aaron

+5

Te das cuenta de que podría ser increíblemente hambriento de memoria, sosteniendo todo el archivo en la memoria PHP –

+0

Una buena pregunta. Gracias por el consejo. – Aaron

0

Desde PHPExcel escribe el archivo en el disco, en cualquier caso, si captura la salida estándar, lo que ocurre internamente es que el archivo se escribe en el disco, a continuación, leer en el disco (y eliminar), impreso por la salida estándar y luego capturado en el buffer de salida.

Es lo mismo que hacer:

$tmpfile = tempnam($tmp_dir, 'phpxltmp'); 

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); 
$objWriter->save($tmpfile); 

$excelOutput = file_get_contents($tmpfile); 
unlink($tmpfile); 
+2

Esto es una especie de sentido común sobre cómo se podría abordar esto, pero hay muchas desventajas en este método. Su creación/uso del disco que requiere más operaciones/tiempo/espacio. Si este script se ejecuta en varias instancias o superposiciones, debe generar un archivo diferente por instancia. Esto puede conducir a problemas de corrupción/acceso. El OP había dicho directamente a una variable, no a un archivo y luego a una variable. – Mayhem

+0

La respuesta ya aborda estos inconvenientes. 'tempnam' crea un archivo diferente por instancia, y dado que PHPExcel usa un archivo en cualquier caso, es el enfoque aparentemente" directo a variable "que es el menos eficiente de los dos. En muchos casos, sería posible utilizar 'readfile' o la gestión de flujo para evitar problemas de memoria y aumentar aún más el rendimiento. Si bien la respuesta aceptada parece ser más directa, lo cual es valioso en sí mismo, aún siento que * esta * debería ser la respuesta aceptada o una alternativa creíble. – LSerni

Cuestiones relacionadas