function addFileToZip($path, $zip) {
$handler = opendir($path);
while (($filename = readdir($handler)) !== false) {
if ($filename != "." && $filename != "..") {
if (is_dir($path . "/" . $filename)) {
$this->addFileToZip($path . "/" . $filename, $zip);
} else { //將文件加入zip對象
$zip->addFile($path . "/" . $filename);
}
}
}
@closedir($path);
}
$zip = new ZipArchive();
if ($zip->open("test.zip", ZipArchive::OVERWRITE) === TRUE) {
addFileToZip("1735", $zip);
$zip->close();
}
1、上面這段代碼是吧當前目錄下的名為1735的文件夾中的內容壓縮到test.php,這時候壓縮出來的zip文件的目錄 結構沒有問題2、但當目標文件夾的位置不是在同級目錄時,比如addFileToZip("tt/1735", $zip); 這時候壓縮出來的zip文件的目錄結構就多了一層tt文件夾
3、Q:有沒有辦法當目標文件不在同級文件夾時,壓縮出來的zip包目錄結構也只有一層?
4 回答

largeQ
TA貢獻2039條經驗 獲得超8個贊
兄弟,不知道你解決了沒有,,我也和你一樣的問題 ,,我也不知道怎么解決?
我最后解決了
使用zip下的renameName,在$zip->addFile($path.$filename);后面再加入一個函數就行了$zip->renameName($path.$filename,$filename);就不會出現多級目錄了.

12345678_0001
TA貢獻1802條經驗 獲得超5個贊
你們怎么解決的啊,按照樓上的辦法他把我本來壓縮文件夾里面的目錄結構也都搞沒了,如果想保留本來壓縮有的結構,去掉他的那些多出來的父結構應該怎么做哦?

青春有我
TA貢獻1784條經驗 獲得超8個贊
function addFileToZip($path, ZipArchive $zip, $sub_dir = '')
{
$handler = opendir($path);
while (($filename = readdir($handler)) !== false)
{
if ($filename != "." && $filename != "..")
{
//文件夾文件名字為'.'和‘..’,不要對他們進行操作
if (is_dir($path . $filename))
{
// 如果讀取的某個對象是文件夾,則遞歸
addFileToZip($path . $filename . '/', $zip, $filename . '/' );
}
else
{
//將文件加入zip對象
$zip->addFile($path . $filename, $sub_dir . $filename );
}
}
}
@closedir($path);
}
- 4 回答
- 0 關注
- 602 瀏覽
添加回答
舉報
0/150
提交
取消