「remove_all_path」或「remove_path」選項似乎都無效
(PHP 5 >= 5.3.0, PHP 7, PHP 8, PECL zip >= 1.9.0)
ZipArchive::addGlob — 透過 glob 模式從目錄新增檔案
從符合 glob pattern
的目錄新增檔案。
注意: 為了最大的可移植性,建議在 ZIP 檔案名稱中始終使用正斜線 (
/
) 作為目錄分隔符號。
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"
用於加密的密碼。
版本 | 說明 |
---|---|
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();
}
?>
對我來說,更好的方法似乎是
$options = array('add_path' => DIRECTORY_SEPARATOR, 'remove_all_path' => TRUE);
在 Windows 上使用 \,在其他系統上使用 /
是的!!「remove_all_path」或「remove_path」都無效,如果您想要正確的結果,您應該這樣做, $option = array( 'add_path' => '/', 'remove_all_path' => '您的路徑' ); 'add_path' 只給一個 '/',然後您就會 (; 。
以下所有方法都有效
---------
範例 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
使用以下選項時無法正常運作
$options = array('remove_all_path' => TRUE);
$zipArchive->addGlob($path."/*", GLOB_BRACE, $options);
檔案的完整路徑會被添加到壓縮檔中。
如果使用以下選項則可以正常運作
$options = array('add_path' => './','remove_all_path' => TRUE);
如同其他人建議的,要移除所有路徑,請使用空格作為基底路徑。
使用 Windows XP 內建工具和 WinRAR 開啟壓縮檔。
$options = array('add_path' => ' ','remove_all_path' => TRUE);
感謝所有貢獻者。