Creacion de .zip con php

publicado por: Anonymous

Estoy tratando de crear una carpeta comprimida con php en estos momentos agrega un solo archivo pero la idea es que sea dinámico.

function crear_zip($id_paciente){
    $files = array( 'C:\xampp\htdocs\bitnami.txt' );
    $zipname = 'C:\xampp\htdocs\zipped_file.zip';
    $zip = new ZipArchive;
    $zip->open($zipname, ZipArchive::CREATE); 
    foreach ($files as $file) {
      $zip->addFile($file);
    }
    $zip->close();
}

El problema es que en el .zip me pone es una copia de la ruta q le di y no el archivo intente dandole solo el nombre del archivo pero al parecer no lo encuentra y no me crea el .zip.. ¿alguna idea?.. Gracias de antemano

solución

El problema es que no le pasas el segundo parámetro a la función $zip->addFile, y por tanto asume el mismo nombre de archivo (incluyendo la ruta).

De acuerdo a la documentación: (traducción libre mía)

bool ZipArchive::addFile ( string $filename [, string $localname ] )

filename
La ruta al archivo que se añade.

localname
El nombre local dentro del fichero ZIP.

Esto significa que el primer parámetro es la ruta al archivo real que deseas añadir en el sistema de archivos del servidor, mientras que el segundo es la ruta y nombre de archivo que este tendrá dentro del archivo comprimido ZIP.

Debes entonces pasar el segundo parámetro, y en este utilizar solamente el nombre del archivo (para lo que puedes valerte de la función basename. Algo similar a:

function crear_zip($id_paciente){
    $files = array( 'C:\xampp\htdocs\bitnami.txt' );
    $zipname = 'C:\xampp\htdocs\zipped_file.zip';
    $zip = new ZipArchive;
    $zip->open($zipname, ZipArchive::CREATE); 
    foreach ($files as $file) {
      $localfile = basename($file);
      $zip->addFile($file, $localfile);
    }
    $zip->close();
}
Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *