Para solventar este problema podemos usar el directorio temporal del sistema, que siempre tiene permisos de escritura. Para obtener la dirección del directorio temporal podemos usar la variable $_ENV de esta forma:
Código: php
-
<?php
-
// Obtener el directorio temporal
-
if (!
empty($_ENV[‘TMP’])) {
-
$tempdir = $_ENV[‘TMP’];
-
} elseif (!
empty($_ENV[‘TMPDIR’])) {
-
$tempdir = $_ENV[‘TMPDIR’];
-
} elseif (!
empty($_ENV[‘TEMP’])) {
-
$tempdir = $_ENV[‘TEMP’];
-
} else {
-
-
}
-
-
if (empty($tempdir)) { die (‘No hay directorio temporal’);
}
-
-
// Nos aseguramos de que acabe en barra lateral
-
$tempdir =
rtrim($tempdir,
‘/’);
-
$tempdir .= ‘/’;
-
-
// Nos aseguramos de que tiene permisos de escritura
-
-
die (‘El directorio temporal no tiene permisos de escritura’);
-
}
-
?>
Como puedes ver en el ejemplo de arriba hay muchas variables diferentes que pueden contener el directorio temporal, y comprobamos cada una. también nos aseguramos de que el directorio acaba en una barra lateral y de que tenga permisos de escritura.
Ahora que podemos acceder al directorio temporal, tenemos que crear un directorio donde podamos almacenar de forma segura y temporal el archivo zip, sin interferencias. Asà que comencemos:
Código: php
-
<?php
-
// Crear un nombre temporal para nuestro directorio
-
-
-
// Nos aseguramos de que no hay otro archivo o directorio con ese nombre
-
-
-
-
// Creamos el directorio
-
-
$dir .= ‘/’;
-
?>
En el ejemplo anterior usamos la función tempnam() para crear un nombre temporal para nuestro directorio. A continuación nos aseguramos primero de que el nombre no está siendo usado, y después procedemos a crear el directorio.
Ahora que ya tenemos el directorio temporal, lvamos a asegurarnos de que nuestro archivo zip se crea correctamente ahÃ, cambiando el directorio de trabajo actual, con la función chdir(), de esta forma:
Código: php
-
<?php
-
// Cambiamos el directorio de trabajo actual para que el archivo zip se cree en el directorio temporal
-
-
?>
El código completo tiene un aspecto como el siguente:
Código: php
-
<?php
-
include (‘pear/archive_zip.php’);
-
-
// Crear la instancia de la clase Archive_Zip e introducir el nombre de nuestro archivo zip
-
$zipfile = New Archive_Zip(‘myzipfile.zip’);
-
-
// Crear una lista de archivos y directorios
-
$list =
array(‘example.txt’);
-
-
// Obtener el directorio temporal
-
if (!
empty($_ENV[‘TMP’])) {
-
$tempdir = $_ENV[‘TMP’];
-
} elseif (!
empty($_ENV[‘TMPDIR’])) {
-
$tempdir = $_ENV[‘TMPDIR’];
-
} elseif (!
empty($_ENV[‘TEMP’])) {
-
$tempdir = $_ENV[‘TEMP’];
-
} else {
-
-
}
-
-
if (empty($tempdir)) { die (‘No hay directorio temporal’);
}
-
-
// Nos aseguramos de que acabe en barra lateral
-
$tempdir =
rtrim($tempdir,
‘/’);
-
$tempdir .= ‘/’;
-
-
// Nos aseguramos de que tiene permisos de escritura
-
-
die (‘El directorio temporal no tiene permisos de escritura’);
-
}
-
-
// Crear un nombre temporal para nuestro directorio
-
-
-
// Nos aseguramos de que no hay otro archivo o directorio con ese nombre
-
-
-
-
// Creamos el directorio
-
-
$dir .= ‘/’;
-
-
// Cambiamos el directorio de trabajo actual para que el archivo zip se cree en el directorio temporal
-
-
-
// Crear el archivo zip
-
$zipfile->create($list);
-
-
echo ‘Archivo zip creado en ‘ .
$dir;
-
-
?>
Ahora sólo hay un problema. Como hemos cambiado el directorio de trabajo, las direcciones relativas no funcionarán. Lo más razonable que se nos viene a la cabeza es usar direcciones absolutas, pero esto tampoco funciona correctamente, debido a un fallo en el paquete Archive_Zip.
Arreglar las direcciones relativas
23 Octubre 2006 · Tags Sin categorÃa |