type not found fatal extensión extension excepción excel2007 error enabled php phpexcel ziparchive

not - PHPExcel_Writer_Exception con el mensaje "No se pudo cerrar el archivo zip php:// output".



type error message class ziparchive not found (9)

Excelent Friend Trabaja para mí en PHP 7.1.2 y trabaja en PhpSpreadsheet, repara el mismo archivo.

PhpSpreadsheet/Writer/Excel2007.php

La solución está en función guardar en Excel2007.php

if (strtolower($pFilename) == ''php://output'' || strtolower($pFilename) == ''php://stdout'') { $pFilename = @tempnam(PHPExcel_Shared_File::sys_get_temp_dir(), ''phpxltmp'');

Reemplace la segunda línea con esto:

$pFilename = dirname(__FILE__).''/''. rand(0, getrandmax()) . rand(0, getrandmax()) . ".phpxltmp";

Gracias.

Estoy usando PHPExcel para exportar algunos datos al usuario en un archivo de Excel. Me gustaría que la secuencia de comandos envíe el archivo de Excel al usuario inmediatamente después de su creación. Aquí está mi código de prueba:

try{ /* Some test data */ $data = array( array(1, 10 , 2 ,), array(3, ''qqq'', ''some string'' ,), ); $objPHPExcel = new PHPExcel(); $objPHPExcel->setActiveSheetIndex(0); /* Fill the excel sheet with the data */ $rowI = 0; foreach($data as $row){ $colI = 0; foreach($row as $v){ $colChar = PHPExcel_Cell::stringFromColumnIndex($colI++); $cellId = $colChar.($rowI+1); $objPHPExcel->getActiveSheet()->SetCellValue($cellId, $v); } $rowI++; } header(''Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet''); header(''Content-Disposition: attachment;filename="export.xlsx"''); header(''Cache-Control: max-age=0''); $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, ''Excel2007''); $objWriter->save(''php://output''); }catch(Exception $e){ echo $e->__toString(); }

En mi servidor local (Windows 7 x64, Php 5.3.8, Apache 2.2.21) obtengo un archivo xlsx válido. No hay errores. Pero hay un problema en el servidor en vivo (Linux 2.6.32-5-amd64, PHP 5.3.3-7+squeeze13, Apache 2.2.16) . El script le permite al navegador descargar el archivo "export.xlsx" con dicho contenido:

exception ''PHPExcel_Writer_Exception'' with message ''Could not close zip file php://output.'' in /var/www/someuser/data/www/somedomain.com/libs/PHPExcel/Writer/Excel2007.php:348 Stack trace: #0 /var/www/someuser/data/www/somedomain.com/classes/Report/Leads/Export.php(339): PHPExcel_Writer_Excel2007->save(''php://output'') #1 /var/www/someuser/data/www/somedomain.com/application/pages/account/controllers/TestController.php(13): Report_Leads_Export->Test() #2 /var/www/someuser/data/www/somedomain.com/libs/Zend/Controller/Action.php(516): Account_TestController->indexAction() #3 /var/www/someuser/data/www/somedomain.com/libs/Zend/Controller/Dispatcher/Standard.php(295): Zend_Controller_Action->dispatch(''indexAction'') #4 /var/www/someuser/data/www/somedomain.com/libs/Zend/Controller/Front.php(954): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http)) #5 /var/www/someuser/data/www/somedomain.com/index.php(511): Zend_Controller_Front->dispatch() #6 {main}

PHP no se está ejecutando en modo seguro. La opción "open_basedir" está vacía (está comentada).

He encontrado dicho código en los archivos PHPExcel:

if ($objZip->close() === false) { throw new PHPExcel_Writer_Exception("Could not close zip file $pFilename."); }

Entonces, la razón del problema es que $objZip->close() === false donde $objZip es una instancia de la clase ZipArchive .

¿Cuál es la razón del problema y cómo puedo resolverlo? Gracias.


Gracias a Mark Baker. Su respuesta ha resuelto el problema. He escrito un método simple de ayuda utilizando su enfoque.

static function SaveViaTempFile($objWriter){ $filePath = sys_get_temp_dir() . "/" . rand(0, getrandmax()) . rand(0, getrandmax()) . ".tmp"; $objWriter->save($filePath); readfile($filePath); unlink($filePath); }

Y acabo de reemplazar $objWriter->save(''php://output'') con SaveViaTempFile($objWriter)


He tenido el mismo error cuando intento ejecutar mi archivo php, solo cambio en la siguiente línea:

$objWriter->save("/dir1"."/".$file.".xlsx");

para esto:

$objWriter->save(dirname(__FILE__)."/dir1"."/".$file.".xlsx");

Agregue el camino del dir y funcionó !!!.


Hola, intenté lo siguiente: en un servidor Linux, Centos 7.0 no especificó la ruta del directorio tmp, entrada:

function SaveViaTempFile($objWriter){ $filePath = '''' . rand(0, getrandmax()) . rand(0, getrandmax()) . ".tmp"; $objWriter->save($filePath); readfile($filePath); unlink($filePath); exit; }

y trabajo !!


La causa más común de este error al guardar en php: // output es una restricción open_basedir que no incluye una carpeta temporal válida del sistema (por ejemplo, /tmp ), o permisos para la carpeta temporal del sistema ... suhosin también puede afectar esto , incluso cuando los permisos obvios parecen estar configurados correctamente.

Un posible entorno de trabajo es escribir el archivo en el sistema de archivos en un directorio que sepa que tiene privilegios completos para escribir, y luego usar readfile () para transmitir ese archivo a php: // salida antes de eliminar el archivo


Los siguientes trabajos para el formato Excel2007. Tendría que ser adaptado para diferentes formatos.

Abre este archivo:

/Classes/PHPExcel/Writer/Excel2007.php

Busque cerca de la línea 196 para:

if (strtolower($pFilename) == ''php://output'' || strtolower($pFilename) == ''php://stdout'') { $pFilename = @tempnam(PHPExcel_Shared_File::sys_get_temp_dir(), ''phpxltmp'');

Reemplace la segunda línea con esto:

$pFilename = dirname(/__FILE__).''/''. rand(0, getrandmax()) . rand(0, getrandmax()) . ".phpxltmp";

Luego puede usar la función de exportación como se describe en la guía del desarrollador.


Para algunas personas que pueden tener este mismo mensaje de ERROR: puede ser muy simple porque el nombre de archivo que está tratando de guardar ya está abierto en su Excel.


Y mi respuesta es: Nombre de archivo tenía símbolos tales como ":", ",", '''' ''Tuvo que reemplazarlos por diferentes. Todos funcionaron


set chmod 777 -R public / results