ver veo vacia una tiene tengo puedo pero pendrive muestra mis memoria los llena guardar esta documento como archivos archivo aparece php memory archive disk

veo - Manipule un archivo en la memoria con PHP(sin crear un archivo temporal en el disco)



no puedo ver mis archivos en mi usb (5)

Intento generar un archivo sobre la marcha en PHP y enviarlo al usuario de inmediato (sin guardarlo). Pensé que no habría necesidad de crear un archivo en el disco ya que los datos que estoy enviando no son persistentes de todos modos, sin embargo, al buscar en la web, no pude averiguar cómo. Tampoco me importa el formato de archivo.

Entonces, la pregunta es:

¿Es posible crear y manipular un archivo comprimido en la memoria dentro de un script php sin crear un archivo temporal en el camino?


¿Existe realmente un problema de rendimiento aquí, o solo ofende su sentido de lo correcto? Muchos procesos escriben archivos temporales y los eliminan, y con frecuencia nunca llegan al disco debido al almacenamiento en caché.

Un archivo temporal se elimina automáticamente cuando se cierra. Esa es su naturaleza.

Solo hay dos maneras en que puedo pensar para crear un archivo zip en la memoria y servirlo, y ambos son probablemente más problemas de los que merecen.

  • usa un disco ram.
  • modifique la clase ziparchive para agregar un método que hace todo lo que hace el método close (), excepto que realmente cierra el archivo. (O agregue un parámetro de dejar abierto para cerrar ()).
    Esto incluso podría no ser posible dependiendo de las bibliotecas C subyacentes.

¿Qué estás usando para generar el archivo? Es posible que pueda usar la secuencia php: // temp o php: // memory para leer y escribir en / desde el archivo.

Ver http://php.net/manual/en/wrappers.php.php



Necesita usar ZipArchive::addFromString ; si usa addFile() el archivo no se agrega hasta que no cierre. (Horrible error en mi humilde opinión, ¿qué pasa si estás tratando de mover archivos a un archivo zip y los borras antes de cerrar el zip ...)
El método addFromString() agrega al archivo de inmediato.


Tuve el mismo problema pero finalmente encontré una solución algo oscura y decidí compartirla aquí.

Encontré los grandes zip.lib.php / unzip.lib.php que vienen con phpmyadmin y están ubicados en el directorio "libraries".

Usar zip.lib.php funcionó como un encanto para mí:

require_once(LIBS_DIR . ''zip.lib.php''); ... //create the zip $zip = new zipfile(); //add files to the zip, passing file contents, not actual files $zip->addFile($file_content, $file_name); ... //prepare the proper content type header("Content-type: application/octet-stream"); header("Content-Disposition: attachment; filename=my_archive.zip"); header("Content-Description: Files of an applicant"); //get the zip content and send it back to the browser echo $zip->file();

Esta secuencia de comandos permite la descarga de un archivo comprimido, sin la necesidad de tener los archivos como archivos reales o guardar el archivo comprimido como un archivo.

Es una pena que esta funcionalidad no sea parte de una biblioteca PHP más genérica.

Aquí hay un enlace al archivo zip.lib.php de la fuente phpmyadmin:

ACTUALIZACIÓN: asegúrese de eliminar la siguiente verificación desde el comienzo de zip.lib.php, ya que de lo contrario la secuencia de comandos termina:

if (! defined(''PHPMYADMIN'')) { exit; }

ACTUALIZACIÓN: Este código también está disponible en el proyecto CodeIgniter: