ZipArchive::addGlob

(PHP 5 >= 5.3.0, PHP 7, PHP 8, PECL zip >= 1.9.0)

ZipArchive::addGlob β€” ДобавляСт Ρ„Π°ΠΉΠ»Ρ‹ ΠΈΠ· Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ ΠΏΠΎ glob-ΡˆΠ°Π±Π»ΠΎΠ½Ρƒ

ОписаниС

public function ZipArchive::addGlob(string $pattern, int $flags = 0, array $options = []): array|false

ΠœΠ΅Ρ‚ΠΎΠ΄ добавляСт Ρ„Π°ΠΉΠ»Ρ‹ ΠΈΠ· ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°, ΠΈΠΌΠ΅Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‚ с glob-шаблоном pattern.

Π—Π°ΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: Для максимальной пСрСносимости, рСкомСндуСтся всСгда ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ прямыми слСшами / ΠΊΠ°ΠΊ раздСлитСлями Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΉ Π² ΠΈΠΌΠ΅Π½Π°Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ².

Бписок ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²

pattern
Π¨Π°Π±Π»ΠΎΠ½, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ функция glob(), с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ сопоставит Ρ„Π°ΠΉΠ»Ρ‹.
flags
Битовая маска Ρ„Π»Π°Π³ΠΎΠ², с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ функция glob().
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();
}

?>

Π‘ΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ Ρ‚Π°ΠΊΠΆΠ΅

  • ZipArchive::addFile() - ДобавляСт Π² ZIP-Π°Ρ€Ρ…ΠΈΠ² Ρ„Π°ΠΉΠ» ΠΏΠΎ Π·Π°Π΄Π°Π½Π½ΠΎΠΌΡƒ ΠΏΡƒΡ‚ΠΈ
  • ZipArchive::addPattern() - Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹ ΠΈΠ· Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ Π² соотвСтствии с шаблоном рСгулярного выраТСния PCRE
οΌ‹Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΡ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ 6 notes

up
6
johnsmith at na dot com ΒΆ
11 years ago
Neither 'remove_all_path' or 'remove_path' options seem to be workng
up
1
sunbinzzzzz at gmail dot com ΒΆ
9 years ago
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 (; 。
up
1
hkn06tr at gmail dot com ΒΆ
2 years ago
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
up
0
Francesc Pineda Segarra ΒΆ
9 years ago
For me the better way seems to be:

$options = array('add_path' => DIRECTORY_SEPARATOR, 'remove_all_path' => TRUE);

On Windows uses \, on others /
up
0
sumariva at gmail dot com ΒΆ
11 years ago
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.
up
0
zckernel at gmail dot com ΒΆ
11 years ago
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);