php打包資料夾

2022-05-01 17:39:27 字數 1493 閱讀 3267

php自帶ziparchive 類,打包就靠這個了。最簡單的就是打包單檔案而非資料夾, 先從簡單的來。先確保zip擴充套件已載入,確保打包的原始檔(夾)存在, 否則退出

if (!extension_loaded('zip') || !file_exists($source))
$zip = new ziparchive();
if (!$zip->open($destination, ziparchive::create))
$zip->addfromstring(basename($source), file_get_contents($source));
在打包資料夾之前, 我們需要遍歷資料夾,並把資料夾新增到壓縮包。在遍歷這一步, 我發現很多中文的資料還是採用很古老的方式, 而php早就提供了內建類,這裡需要用到兩個類the recursivedirectoryiterator class及the recursiveiteratoriterator class

recursivedirectoryiterator提供遞迴遍歷檔案系統目錄的介面,recursiveiteratoriterator可用於通過遞迴迭代器進行遍歷,我們開始吧

$files = new recursiveiteratoriterator(new recursivedirectoryiterator($source), recursiveiteratoriterator::self_first);

我們選擇recursiveiteratoriterator::self_first,因為需要保留目錄。目前為止,我們還缺少乙個將目錄新增到壓縮包的函式,php官方自帶ziparchive::addemptydir,下面是打包資料夾的**

foreach ($files as $file)

else if (is_file($file) === true)

}

到這就基本完成了,下面是完整的打包函式

/** 遞迴打包資料夾

* @param $source

* @param $destination

* @return bool

*/function zip($source, $destination)

$zip = new ziparchive();

if (!$zip->open($destination, ziparchive::create))

$source = str_replace('\\', '/', realpath($source));

if (is_dir($source) === true)

else if (is_file($file) === true)}}

else if (is_file($source) === true)

return $zip->close();

}

Linux下壓縮某個資料夾(資料夾打包)

tar zcvf home xahot.tar.gz xahot tar zcvf 打包後生成的檔名全路徑 要打包的目錄 例子 把 xahot資料夾打包後生成乙個 home xahot.tar.gz的檔案。zip 壓縮方法 壓縮當前的資料夾 zip r xahot.zip r表示遞迴 zip 引數 ...

LINUX下壓縮某個資料夾(資料夾打包)

tar zcvf home xahot.tar.gz xahot tar zcvf 打包後生成的檔名全路徑 要打包的目錄 例子 把 xahot資料夾打包後生成乙個 home xahot.tar.gz的檔案。zip 壓縮方法 壓縮當前的資料夾 zip r xahot.zip r表示遞迴 zip 引數 ...

Linux下壓縮某個資料夾(資料夾打包)

tar zcvf home xahot.tar.gz xahot tar zcvf 打包後生成的檔名全路徑 要打包的目錄 例子 把 xahot資料夾打包後生成乙個 home xahot.tar.gz的檔案。zip 壓縮方法 壓縮當前的資料夾 zip r xahot.zip r表示遞迴 zip 引數 ...