PHP Conference Japan 2024

ZipArchive::addGlob

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

ZipArchive::addGlob透過 glob 模式從目錄新增檔案

說明

public ZipArchive::addGlob(字串 $pattern, 整數 $flags = 0, 陣列 $options = []): 陣列|false

從符合 glob pattern 的目錄新增檔案。

注意: 為了最大的可移植性,建議在 ZIP 檔案名稱中始終使用正斜線 (/) 作為目錄分隔符號。

參數

pattern

用於匹配檔案的 glob() 模式。

flags

一個 glob() 旗標的位元遮罩。

選項(options)

一個關聯式陣列,包含可用的選項:

回傳值

成功時回傳已新增檔案的 陣列,失敗時回傳 false

更新日誌

版本 說明
8.0.0, PECL zip 1.18.0 options 中新增了 "flags"
8.0.0, PECL zip 1.18.1 options 中新增了 "comp_method""comp_flags""enc_method""enc_password"
8.3.0, PECL zip 1.22.1 新增了 ZipArchive::FL_OPEN_FILE_NOW

範例

範例 #1 ZipArchive::addGlob() 範例

新增目前工作目錄中的所有 php 腳本和文字檔

<?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();
}
?>

另請參閱

新增註記

使用者貢獻的註記 6 則註記

johnsmith at na dot com
9 年前
「remove_all_path」或「remove_path」選項似乎都無效
Francesc Pineda Segarra
7 年前
對我來說,更好的方法似乎是

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

在 Windows 上使用 \,在其他系統上使用 /
sunbinzzzzz at gmail dot com
7 年前
是的!!「remove_all_path」或「remove_path」都無效,如果您想要正確的結果,您應該這樣做, $option = array( 'add_path' => '/', 'remove_all_path' => '您的路徑' ); 'add_path' 只給一個 '/',然後您就會 (; 。
hkn06tr at gmail dot com
9 個月前
以下所有方法都有效
---------
範例 1
幾乎所有遞迴 5 層的檔案都會被壓縮
$zip->addGlob("*.*");
$zip->addGlob("*/*.*");
$zip->addGlob("*/*/*.*");
$zip->addGlob("*/*/*/*.*");
$zip->addGlob("*/*/*/*/*.*");
$zip->addGlob("*/*/*/*/*/*.*"); // 第 5 層
---------
範例 2
$zip->addGlob("library/*.*");
library 資料夾下的所有檔案
---------
範例 3
$zip->addGlob("*/*.[cpj]*");
表示所有以 cpj 開頭的檔案
所以它們都包含在內
css
php
js
---------
範例 4
$zip->addGlob("*/*.[cpj][sh]*");
確保
css
php
js
---------
範例 5 (額外)
更複雜的
$zip->addGlob("[ab]*/c*/*.[cpjth][shxt]*");
所有以 a 或 b 開頭的資料夾,然後在子資料夾中必須以 c 開頭,但僅限這些檔案
css php txt js html
zckernel at gmail dot com
9 年前
使用以下選項時無法正常運作
$options = array('remove_all_path' => TRUE);
$zipArchive->addGlob($path."/*", GLOB_BRACE, $options);

檔案的完整路徑會被添加到壓縮檔中。

如果使用以下選項則可以正常運作
$options = array('add_path' => './','remove_all_path' => TRUE);
sumariva at gmail dot com
9 年前
如同其他人建議的,要移除所有路徑,請使用空格作為基底路徑。
使用 Windows XP 內建工具和 WinRAR 開啟壓縮檔。

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

感謝所有貢獻者。
To Top