phpday 2025 - Call For Papers

ZipArchive::addGlob

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

ZipArchive::addGlobAdicionar arquivos de um diretório por padrão glob

Descrição

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

Adiciona arquivos de um diretório que correspondem ao pattern glob.

Nota: Para portabilidade máxima, é recomendável sempre usar barras normais (/) como separador de diretório em nomes de arquivos ZIP.

Parâmetros

pattern

Um padrão glob() contra o qual os arquivos serão correspondidos.

flags

Uma máscara de bits de opções glob().

options

Um array associativo de opções. As opções disponíveis são:

  • "add_path"

    Prefixo a ser adicionado ao traduzir para o caminho local do arquivo dentro do arquivo. Isso é aplicado após quaisquer operações de remoção definidas pelas opções "remove_path" ou "remove_all_path".

  • "remove_path"

    Prefixo a ser removido dos caminhos de arquivo correspondentes antes de serem adicionados ao arquivo.

  • "remove_all_path"

    true para usar apenas o nome do arquivo e adicionar à raiz do arquivo.

  • "flags"

    Máscara de bits consistindo em ZipArchive::FL_OVERWRITE, ZipArchive::FL_ENC_GUESS, ZipArchive::FL_ENC_UTF_8, ZipArchive::FL_ENC_CP437, ZipArchive::FL_OPEN_FILE_NOW. O comportamento dessas constantes é descrito na página de constantes ZIP.

  • "comp_method"

    Método de compressão, uma das constantes ZipArchive::CM_*,

  • "comp_flags"

    Nível de compressão.

  • "enc_method"

    Método de criptografia, um dos constantes ZipArchive::EM_*.

  • "enc_password"

    Senha usada para criptografia.

Valor Retornado

Um array de arquivos adicionados em caso de sucesso ou false em caso de falha

Registro de Alterações

Versão Descrição
8.0.0, PECL zip 1.18.0 "flags" em options foi adicionado.
8.0.0, PECL zip 1.18.1 "comp_method", "comp_flags", "enc_method" e "enc_password" em options foram adicionados.
8.3.0, PECL zip 1.22.1 ZipArchive::FL_OPEN_FILE_NOW foi adicionado.

Exemplos

Exemplo #1 Exemplo de ZipArchive::addGlob()

Adiciona todos os scripts php e arquivos de texto do diretório de trabalho atual

<?php
$zip
= new ZipArchive();
$ret = $zip->open('application.zip', ZipArchive::CREATE | ZipArchive::OVERWRITE);
if (
$ret !== TRUE) {
printf('Failed with code %d', $ret);
} else {
$options = array('add_path' => 'sources/', 'remove_all_path' => TRUE);
$zip->addGlob('*.{php,txt}', GLOB_BRACE, $options);
$zip->close();
}
?>

Veja Também

adicione uma nota

Notas Enviadas por Usuários (em inglês) 6 notes

up
6
johnsmith at na dot com
9 years ago
Neither 'remove_all_path' or 'remove_path' options seem to be workng
up
1
Francesc Pineda Segarra
7 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
1
sunbinzzzzz at gmail dot com
7 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
9 months 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
zckernel at gmail dot com
9 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);
up
-1
sumariva at gmail dot com
9 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.
To Top