CodeIgniter User Guide Version 1.6.1


Clase de Codificación Zip

La Clase de Codificación Zip de CodeIgniter le permite crear archivos Zip. Los archivos pueden ser descargados a su computadora o guardados en un directorio.

Initializando la Clase

Como la mayoría de las otras clases en CodeIgniter, La clase Zip es inicializada en su controlador usando la función $this->load->library:

$this->load->library('zip');

Una vez cargada, el objeto de la librería Zip estará disponible usando: $this->zip

Ejemplos de Uso

Este ejemplo demuestra como comprimir un archivo, guardarlo en una carpeta en su servidor, y descargarlo a su computadora.

$nombre = 'misdatos1.txt';
$datos = 'Una Cadena de Datos!';

$this->zip->add_data($nombre, $datos);

// Escribe el archivo zip en una carpeta en su servidor. Lo nombra "mi_copia_de_seguridad.zip"
$this->zip->archive('/ruta/al/directorio/mi_copia_de_seguridad.zip');

// Descarga el archivo a su escritorio. Lo nombra "mi_copia_de_seguridad.zip"
$this->zip->download('mi_copia_de_seguridad.zip');

Referencia de Función

$this->zip->add_data()

Le permite agregar datos al archivo Zip. El primer parámetro debe contener el nombre que quisiera darle al archivo, el segundo parámetro debe contener los datos del archivo como una cadena:

$nombre = 'mi_bio.txt';
$datos = 'Yo nací en un ascencor...';

$this->zip->add_data($nombre, $datos);

Puede realizar múltiples llamadas a esta función para agregar varios archivos a su archivo. Ejemplo:

$nombre = 'misdatos1.txt';
$datos = 'Una Cadena de Datos!';
$this->zip->add_data($nombre, $datos);

$nombre = 'misdatos.txt';
$datos = 'Otra Cadena de Datos!';
$this->zip->add_data($nombre, $datos);

O puede pasar múltiples archivos usando como un arreglo:

$datos = array(
                'misdatos1.txt' => 'Una Cadena de Datos!',
                'misdatos2.txt' => 'Otra Cadena de Datos!'
            );

$this->zip->add_data($datos);

$this->zip->download('mi_copia_de_seguridad.zip');

Si quiere que sus datos comprimidos se organicen en sub-carpetas, incluya la ruta como parte del archivo:

$nombre = 'personal/mi_bio.txt';
$datos = 'Yo nací en un ascensor...';

$this->zip->add_data($nombre, $datos);

El ejemplo anterior ubicará mi_bio.txt dentro de la carpeta llamada personal.

$this->zip->add_dir()

Le permite agregar un directorio. Usualmente esta función no es necesaria ya que puede ubicar sus datos en carpetas cuando use $this->zip->add_data(), pero si quiere crear una carpeta vacía puede hacerlo.Ejemplo:

$this->zip->add_dir('micarpeta'); // Crea una carpeta llamada "micarpeta"

$this->zip->read_file()

Le permite comprimir un archivo que ya existe en algún lugar en su servidor. Suministra una ruta al archivo y la clase zip lo leerá y lo agregará al archivo:

$ruta = '/ruta/a/foto.jpg';

$this->zip->read_file($ruta);

// Descarga el archivo a su escritorio. Lo nombra "mi_copia_de_seguridad.zip"
$this->zip->download('mi_copia_de_seguridad.zip');

Si quiere que su archivo Zip mantenga la estructura de directorio donde se encuentra el archivo, pase TRUE (booleano) en el segundo parámetro. Ejemplo:

$ruta = '/ruta/a/foto.jpg';

$this->zip->read_file($ruta, TRUE);

// Descarga el archivo a su escritorio. Lo nombra "mi_copia_de_seguridad.zip"
$this->zip->download('mi_copia_de_seguridad.zip');

En el ejemplo anterior, foto.jpg será ubicado dentro de dos carpetas: path/to/

$this->zip->read_dir()

Le permite comprimir una carpeta (y su contenido) que ya existe en algún lugar en su servidor. Suministra la ruta al directorio y la clase zip lo leerá recursivamente y lo recreará como archivo Zip. Todos los archivos contenidos dentro de la ruta suministrada serán codificados, así también cualquier subcarpeta contenida en él. Ejemplo:

$ruta = '/ruta/a/su/directorio/';

$this->zip->read_dir($ruta);

// Descarga el archivo a su escritorio. Lo nombra "mi_copia_de_seguridad.zip"
$this->zip->download('mi_copia_de_seguridad.zip');

$this->zip->archive()

Escribe el archivo codificado Zip a un directorio en su servidor. Suministra una ruta de servidor válida finalizando en el nombre del archivo. Asegurese que el directorio es escriturable (666 o 777 usualmente está OK). Ejemplo:

$this->zip->archive('/ruta/a/carpeta/miarchivo.zip'); // Crea un archivo llamado miarchivo.zip

$this->zip->download()

Causa que el archivo Zip sea descargado a su computadora. La función debe Causes the Zip file to be downloaded to your server. A la función debe pasarle el nombre que quiere que el zip sea llamado. Ejemplo:

$this->zip->download('cosas_nuevas.zip'); // El archivo será llamado "cosas_nuevas.zip"

Nota:  No muestre ningún dato en el controlador en el cual llama a esta función ya que envía varios encabezados que causa que la descarga ocurra y el archivo sea tratado como binario.

$this->zip->get_zip()

Devuelve los datos comprimidos del archivo Zip. Generalmente no necesitará esta función a menos que quiera hacer algo único con los datos. Ejemplo:

$nombre = 'mi_bio.txt';
$datos = 'Nací en un ascensor...';

$this->zip->add_data($nombre, $datos);

$zip_file = $this->zip->get_zip();

$this->zip->clear_data()

La clase de Zip guarda todos sus datos así no necesita recompilar el archivo Zip por cada llamada que use anteriormente. Si, sin embargo, necesita crear múltiples Zip, cada uno con diferentes datos, puede limpiar el caché entre llamadas. Ejemplo:

$nombre = 'mi_bio.txt';
$datos = 'Nací en un ascensor...';

$this->zip->add_data($nombre, $datos);
$zip_file = $this->zip->get_zip();

$this->zip->clear_data();

$nombre = 'foto.jpg';
$this->zip->read_file("/ruta/a/photo.jpg"); // Lee el contenido del archivo


$this->zip->download('miphotos.zip');