php获取压缩文件列表,php获取所有文件并压缩
/*
* 壓縮文件
* */
function zip($files){
$zipName = 'download.zip';
$zip = new \ZipArchive;//使用本類,linux需開啟zlib,windows需取消php_zip.dll前的注釋
/*
* 通過ZipArchive的對象處理zip文件
* $zip->open這個(gè)方法如果對zip文件對象操作成功,$zip->open這個(gè)方法會(huì)返回TRUE
* $zip->open這個(gè)方法第一個(gè)參數(shù)表示處理的zip文件名。
* 這里重點(diǎn)說下第二個(gè)參數(shù),它表示處理模式
* ZipArchive::OVERWRITE 總是以一個(gè)新的壓縮包開始,此模式下如果已經(jīng)存在則會(huì)被覆蓋。
* ZIPARCHIVE::CREATE 如果不存在則創(chuàng)建一個(gè)zip壓縮包,若存在系統(tǒng)就會(huì)往原來的zip文件里添加內(nèi)容。
*
* 這里不得不說一個(gè)大坑。
* 我的應(yīng)用場景是需要每次都是創(chuàng)建一個(gè)新的壓縮包,如果之前存在,則直接覆蓋,不要追加
* so,根據(jù)官方文檔和參考其他代碼,$zip->open的第二個(gè)參數(shù)我應(yīng)該用 ZipArchive::OVERWRITE
* 問題來了,當(dāng)這個(gè)壓縮包不存在的時(shí)候,會(huì)報(bào)錯(cuò):ZipArchive::addFile(): Invalid or uninitialized Zip object
* 也就是說,通過我的測試發(fā)現(xiàn),ZipArchive::OVERWRITE 不會(huì)新建,只有當(dāng)前存在這個(gè)壓縮包的時(shí)候,它才有效
* 所以我的解決方案是 $zip->open($zipName, \ZIPARCHIVE::OVERWRITE | \ZIPARCHIVE::CREATE)
*
* 以上總結(jié)基于我當(dāng)前的運(yùn)行環(huán)境來說
* */
if ($zip->open($zipName, \ZIPARCHIVE::OVERWRITE | \ZIPARCHIVE::CREATE)!==TRUE) {
exit('無法打開文件,或者文件創(chuàng)建失敗');
}
foreach($files as $val){
//$attachfile = $attachmentDir . $val['filepath']; //獲取原始文件路徑
if(file_exists($val)){
//addFile函數(shù)首個(gè)參數(shù)如果帶有路徑,則壓縮的文件里包含的是帶有路徑的文件壓縮
//若不希望帶有路徑,則需要該函數(shù)的第二個(gè)參數(shù)
$zip->addFile($val, basename($val));//第二個(gè)參數(shù)是放在壓縮包中的文件名稱,如果文件可能會(huì)有重復(fù),就需要注意一下
}
}
$zip->close();//關(guān)閉
if(!file_exists($zipName)){
exit("無法找到文件"); //即使創(chuàng)建,仍有可能失敗
}
return '打包成功';
}
/*
* 獲取文件的路徑及名稱
* */
function traverse($path)
{
global $filePath;//得到外部定義的數(shù)組
$current_dir = opendir($path); //opendir()返回一個(gè)目錄句柄,失敗返回false
while (($file = readdir($current_dir)) !== false) { //readdir()返回打開目錄句柄中的一個(gè)條目
$sub_dir = $path . DIRECTORY_SEPARATOR . $file; //構(gòu)建子目錄路徑
if ($file == '.' || $file == '..') {
continue;
} else if (is_dir($sub_dir)) { //如果是目錄,進(jìn)行遞歸
traverse($sub_dir); //嵌套遍歷子文件夾
} else { //如果是文件,直接輸出路徑和文件名
$filePath[$path . '/' . $file] = $path . '/' . $file;//把文件路徑賦值給數(shù)組
}
}
return $filePath;
}
總結(jié)
以上是生活随笔為你收集整理的php获取压缩文件列表,php获取所有文件并压缩的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: win10 启动提示重启怎么办啊 win
- 下一篇: 七牛云 php sdk 安装,linux