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 β ΠΠΎΠ±Π°Π²Π»ΡΠ΅Ρ ΡΠ°ΠΉΠ»Ρ ΠΈΠ· Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ ΠΏΠΎ glob-ΡΠ°Π±Π»ΠΎΠ½Ρ
$pattern, int $flags = 0, array $options = []): array|false
ΠΠ΅ΡΠΎΠ΄ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ ΡΠ°ΠΉΠ»Ρ ΠΈΠ· ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π°, ΠΈΠΌΠ΅Π½Π° ΠΊΠΎΡΠΎΡΡΡ
ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡΡ Ρ glob-ΡΠ°Π±Π»ΠΎΠ½ΠΎΠΌ pattern.
ΠΠ°ΠΌΠ΅ΡΠ°Π½ΠΈΠ΅: ΠΠ»Ρ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠΉ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠΈΠΌΠΎΡΡΠΈ, ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ Π²ΡΠ΅Π³Π΄Π° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΏΡΡΠΌΡΠΌΠΈ ΡΠ»Π΅ΡΠ°ΠΌΠΈ
/ΠΊΠ°ΠΊ ΡΠ°Π·Π΄Π΅Π»ΠΈΡΠ΅Π»ΡΠΌΠΈ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΉ Π² ΠΈΠΌΠ΅Π½Π°Ρ ΡΠ°ΠΉΠ»ΠΎΠ².
patternflagsglob().
optionsΠΡΡΠΎΡΠΈΠ°ΡΠΈΠ²Π½ΡΠΉ ΠΌΠ°ΡΡΠΈΠ² ΠΎΠΏΡΠΈΠΉ. ΠΠ°ΡΠ°ΠΌΠ΅ΡΡ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ:
"add_path"
ΠΡΠ΅ΡΠΈΠΊΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΡΡΡ Π² Π½Π°ΡΠ°Π»ΠΎ ΠΏΡΠΈ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄Π΅ Π² Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠΉ ΠΏΡΡΡ ΡΠ°ΠΉΠ»Π° Π² Π°ΡΡ
ΠΈΠ²Π΅.
ΠΠ΅ΡΠΎΠ΄ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅Ρ ΠΏΡΠ΅ΡΠΈΠΊΡ ΠΏΠΎΡΠ»Π΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΠ»ΠΈ
ΠΎΠΏΡΠΈΡΠΌΠΈ "remove_path" ΠΈΠ»ΠΈ "remove_all_path".
"remove_path"
ΠΡΠ΅ΡΠΈΠΊΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΡΠ΄Π°Π»ΠΈΡΡ ΠΈΠ· ΠΏΡΡΠ΅ΠΉ ΡΠ°ΠΉΠ»ΠΎΠ² ΠΏΠ΅ΡΠ΅Π΄ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ Π² Π°ΡΡ
ΠΈΠ².
"remove_all_path"
Π‘ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ true ΠΌΠ΅ΡΠΎΠ΄ Π²ΠΎΠ·ΡΠΌΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΈΠΌΡ ΡΠ°ΠΉΠ»Π° ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡ Π΅Π³ΠΎ Π² ΠΊΠΎΡΠ΅Π½Ρ Π°ΡΡ
ΠΈΠ²Π°.
"flags"
ΠΠΈΡΠΎΠ²Π°Ρ ΠΌΠ°ΡΠΊΠ° ΠΈΠ· ΡΠ»Π΅Π΄ΡΡΡΠΈΡ
ΠΊΠΎΠ½ΡΡΠ°Π½Ρ:
ZipArchive::FL_OVERWRITE,
ZipArchive::FL_ENC_GUESS,
ZipArchive::FL_ENC_UTF_8,
ZipArchive::FL_ENC_CP437,
ZipArchive::FL_OPEN_FILE_NOW.
ΠΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ½ΡΡΠ°Π½Ρ ΠΎΠΏΠΈΡΡΠ²Π°Π΅Ρ ΡΡΡΠ°Π½ΠΈΡΠ° Β«ZIP-ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡΒ».
"comp_method"
ΠΠ΅ΡΠΎΠ΄ ΡΠΆΠ°ΡΠΈΡ. ΠΠΏΡΠΈΡ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΠΎΠ΄Π½Ρ ΠΈΠ· ΠΊΠΎΠ½ΡΡΠ°Π½Ρ ZipArchive::CM_*.
"comp_flags"
Π£ΡΠΎΠ²Π΅Π½Ρ ΡΠΆΠ°ΡΠΈΡ.
"enc_method"
ΠΠ΅ΡΠΎΠ΄ ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΡ. ΠΠΏΡΠΈΡ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΠΎΠ΄Π½Ρ ΠΈΠ· ΠΊΠΎΠ½ΡΡΠ°Π½Ρ ZipArchive::EM_*.
"enc_password"
ΠΠ°ΡΠΎΠ»Ρ Π΄Π»Ρ ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΡ.
Π ΡΠ»ΡΡΠ°Π΅ ΡΡΠΏΠ΅ΡΠ½ΠΎΠ³ΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΌΠ΅ΡΠΎΠ΄ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΌΠ°ΡΡΠΈΠ² (array) ΡΠ°ΠΉΠ»ΠΎΠ²,
ΠΊΠΎΡΠΎΡΡΠ΅ Π΄ΠΎΠ±Π°Π²ΠΈΠ» Π² Π°ΡΡ
ΠΈΠ², ΠΈΠ»ΠΈ false, Π΅ΡΠ»ΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ»Π° ΠΎΡΠΈΠ±ΠΊΠ°
Π€ΡΠ½ΠΊΡΠΈΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ true, Π΅ΡΠ»ΠΈ Π²ΡΠΏΠΎΠ»Π½ΠΈΠ»Π°ΡΡ ΡΡΠΏΠ΅ΡΠ½ΠΎ, ΠΈΠ»ΠΈ false, Π΅ΡΠ»ΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ»Π° ΠΎΡΠΈΠ±ΠΊΠ°.
| ΠΠ΅ΡΡΠΈΡ | ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ |
|---|---|
| 8.0.0, PECL-ΠΌΠΎΠ΄ΡΠ»Ρ zip 1.18.0 |
ΠΠΎΠ±Π°Π²ΠΈΠ»ΠΈ ΠΎΠΏΡΠΈΡ "flags" Π² ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ options.
|
| 8.0.0, PECL-ΠΌΠΎΠ΄ΡΠ»Ρ zip 1.18.1 |
ΠΠΎΠ±Π°Π²ΠΈΠ»ΠΈ ΠΎΠΏΡΠΈΠΈ "comp_method", "comp_flags",
"enc_method" ΠΈ "enc_password"
Π² ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ options.
|
| 8.3.0, PECL-ΠΌΠΎΠ΄ΡΠ»Ρ zip 1.22.1 |
ΠΠΎΠ±Π°Π²ΠΈΠ»ΠΈ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ ZipArchive::FL_OPEN_FILE_NOW.
|
ΠΡΠΈΠΌΠ΅Ρ #1 ΠΡΠΈΠΌΠ΅Ρ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ ΡΠ°ΠΉΠ»Π°Π² Π°ΡΡ ΠΈΠ² ΠΏΠΎ glob-ΡΠ°Π±Π»ΠΎΠ½Ρ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ ZipArchive::addGlob()
ΠΠΎΠ±Π°Π²ΠΈΡΡ Π² Π°ΡΡ ΠΈΠ² PHP-ΡΠΊΡΠΈΠΏΡΡ ΠΈ ΡΠ΅ΠΊΡΡΠΎΠ²ΡΠ΅ ΡΠ°ΠΉΠ»Ρ ΠΈΠ· ΡΠ΅ΠΊΡΡΠ΅ΠΉ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ.
<?php
$zip = new ZipArchive();
$ret = $zip->open('application.zip', ZipArchive::CREATE | ZipArchive::OVERWRITE);
if ($ret !== TRUE) {
printf('ΠΠΎΠ·Π½ΠΈΠΊΠ»Π° ΠΎΡΠΈΠ±ΠΊΠ° Ρ ΠΊΠΎΠ΄ΠΎΠΌ %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 workngYes!! 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 htmlFor me the better way seems to be:
$options = array('add_path' => DIRECTORY_SEPARATOR, 'remove_all_path' => TRUE);
On Windows uses \, on others /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.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);