Neither 'remove_all_path' or 'remove_path' options seem to be workng
(PHP 5 >= 5.3.0, PHP 7, PHP 8, PECL zip >= 1.9.0)
ZipArchive::addGlob — Añadir ficheros de un directorio mediante un patrón glob
Añade ficheros de un directorio que corresponde con el patrón global pattern
.
Nota: Para una portabilidad máxima, se recomienda utilizar siempre barras hacia adelante (
/
) como separador de directorios en nombres de ficheros ZIP.
pattern
Un patrón glob()contra el cual se hará la correspondencia con los ficheros.
flags
Una máscara de un bit de marcas glob()
.
options
Un array asociativo de opciones. Las opciones disponibles son:
"add_path"
Prefijo a indicar cuando se traduce la ruta de acceso del fichero dentro
del archivo. Esta traducción se aplica después de cualquier operación de eliminación definida por las opciones
"remove_path"
o "remove_all_path"
.
"remove_path"
Prefijo para eliminar la ruta de acceso de los ficheros antes de añadirlos al archivo.
"remove_all_path"
true
para utilizar únicamente el nombre del fichero y añadirlo a la raíz del archivo.
"flags"
Máscara de bits compuesta por
ZipArchive::FL_OVERWRITE
,
ZipArchive::FL_ENC_GUESS
,
ZipArchive::FL_ENC_UTF_8
,
ZipArchive::FL_ENC_CP437
,
ZipArchive::FL_OPEN_FILE_NOW
.
El comportamiento de estas constantes se describe en
la página de constantes ZIP.
"comp_method"
Compression method, one of the ZipArchive::CM_*
constants, see ZIP constants page.
"comp_flags"
Compression level.
"enc_method"
Encryption method, one of the ZipArchive::EM_*
constants, see ZIP constants page.
"enc_password"
Password used for encryption.
Versión | Descripción |
---|---|
8.0.0 / 1.18.0 |
"flags" in options was added.
|
8.0.0 / 1.18.1 |
"comp_method" , "comp_flags" ,
"enc_method" and "enc_password" in
options were added.
|
8.3.0 / 1.22.1 |
ZipArchive::FL_OPEN_FILE_NOW was added.
|
Ejemplo #1 Ejemplo con ZipArchive::addGlob()
Añadir todos los ficheros de scripts y texto php del directorio de trabajo actual
<?php
$zip = new ZipArchive();
$ret = $zip->open('application.zip', ZipArchive::CREATE | ZipArchive::OVERWRITE);
if ($ret !== TRUE) {
printf('Erróneo con el código %d', $ret);
} else {
$options = array('add_path' => 'sources/', 'remove_all_path' => TRUE);
$zip->addGlob('*.{php,txt}', GLOB_BRACE, $options);
$zip->close();
}
?>
Neither 'remove_all_path' or 'remove_path' options seem to be workng
For me the better way seems to be:
$options = array('add_path' => DIRECTORY_SEPARATOR, 'remove_all_path' => TRUE);
On Windows uses \, on others /
Yes!! neither 'remove_all_path' or 'remove_path' be working,if you want the right result,you should like this, $option = array( 'add_path' => '/', 'remove_all_path' => 'your path' ); 'add_path' just give a '/', then you will (; 。
The following all works:
---------
Ex-1:
Nearly all files for 5 level recursively are zipped:
$zip->addGlob("*.*");
$zip->addGlob("*/*.*");
$zip->addGlob("*/*/*.*");
$zip->addGlob("*/*/*/*.*");
$zip->addGlob("*/*/*/*/*.*");
$zip->addGlob("*/*/*/*/*/*.*"); // 5th
---------
Ex-2:
$zip->addGlob("library/*.*");
all files under library
---------
Ex-3:
$zip->addGlob("*/*.[cpj]*");
Means all files starting with cpj
So they all included
css
php
js
---------
Ex-4:
$zip->addGlob("*/*.[cpj][sh]*");
Take guarantee:
css
php
js
---------
Ex-5 Bonus:
More complicated:
$zip->addGlob("[ab]*/c*/*.[cpjth][shxt]*");
All folder starting with a or b and then in subfolder must start with c but only those files:
css php txt js html
Doesn't work with the following options:
$options = array('remove_all_path' => TRUE);
$zipArchive->addGlob($path."/*", GLOB_BRACE, $options);
The full path to file is adding to the archive.
Works well if:
$options = array('add_path' => './','remove_all_path' => TRUE);
As others suggested, to remove all paths, use the space as basepath.
Zip opened with builtin utility on a Windows XP and WinRAR.
$options = array('add_path' => ' ','remove_all_path' => TRUE);
Thanks for all contributers.