/* *
* * 生成zip压缩文件
* * $sourceDir:被压缩的文件夹或文件
* * $outFileName:输出的压缩文件名称
* * $zlj 被压缩的文件夹或文件的顶级父路径,如压缩文件夹D:/www/cc 则为D:/www/cc
* */
public function createZipResources($sourceDir, $outFileName = '',$zlj='')
{
if ($outFileName == '') {
$outFileName = time().'.zip';
} else {
$outFileName = $outFileName.'.zip';
}
$fileNames = [];
//判断需要被压缩的目标是文件还是文件夹
if (is_file($sourceDir)) {
$fileNames['file'][basename($sourceDir)] = $sourceDir;
}
if (!array_key_exists('file', $fileNames) && !array_key_exists('dir', $fileNames)) {
$fileNames['dir'][str_replace($zlj.'/', "", $folderName)] = [];
}
// 生成文件
$zip = new \ZipArchive (); // 使用本类,linux需开启zlib,windows需取消php_zip.dll前的注释
if ($zip->open ($outFileName, \ZIPARCHIVE::CREATE ) !== TRUE) {
exit ( '无法打开文件,或者文件创建失败' );
}
$fileNameArr = $fileNames;
$toFolderZip = function ($fileNameArr,$zip, $zlj){
foreach ( $fileNameArr as $key => $value ) {
if ($key == 'file') {
foreach ($value as $fileName => $filePath) {
$fileName = urldecode($fileName);
$xlj=str_replace($zlj.'/', "", $filePath);
$zip->addFile($filePath, $xlj);
}
}
if ($key == 'dir') {
foreach ($value as $folderName => $folderObject) {
$folderName = urldecode($folderName);
$xlj=str_replace($zlj.'/', "", $folderName);
$zip->addEmptyDir($xlj);
}
}
}
};
$toFolderZip($fileNameArr, $zip, $zlj);
$zip->close(); // 关闭
}
/* *
* * 压缩当前目录的所有文件----多个文件直接压缩不需要保留原目录,可循环使用当前方法压缩每个文件,不要文件夹
* * $str 要压缩的绝对路径如:'E:/phpstudy_pro/WWW/ceshi/data/cs'
* * $outFileName 要压缩为的压缩包名
* * $one 是否为要压缩的文件夹的根目录 如压缩'E:/phpstudy_pro/WWW/ceshi/data/cs' 则第一次调用 为根目录,$one 为false 如果直接对根目录下的文件和文件夹压缩 $one 为true
* * $zlj 被压缩的文件夹或文件的顶级父路径,如压缩文件夹D:/www/cc 则为D:/www/cc
* */
public function ys_file($str,$outFileName,$one=false,$zlj='') {
if(!is_file($str)){
$fileNames = scandir($str);
foreach($fileNames as $ks=>$vs){
if(!in_array($vs,['.','..'])){
$one && $this->createZipResources($str,$outFileName,$zlj);
$this->ys_file($str.'/'.$vs,$outFileName,true,$zlj);
}
}
}else{
$this->createZipResources($str,$outFileName,$zlj);
}
}
/* *
* * 解压当前zip文件到当前目录
* */
public function jy_file($file){
$zip = new \ZipArchive;
if ($zip->open($file) === TRUE) {//中文文件名要使用ANSI编码的文件格式
$zip->extractTo(dirname($file));//提取全部文件到当前目录
//$zip->extractTo('/my/destination/dir/', array('pear_item.gif', 'testfromfile.php'));//提取部分文件
$zip->close();
return 1;
} else {
return 0;
}
}
//测试压缩文件,解压缩文件
public function test_jys()
{
//压缩文件
$basePath = 'E:/phpstudy_pro/WWW/ceshi/data/cs';//只能用绝对路径
$zipName = $basePath.'/cs';
$this->ys_file($basePath, $zipName, false,$basePath);
//解压文件到当前目录
$basePath = 'E:/phpstudy_pro/WWW/ceshi/data/cs/qin.zip';//只能用绝对路径
$this->jy_file($basePath);
}
Thinkphp3.2 压缩文件、解压文件,保持原层级关系
最新推荐文章于 2024-06-03 15:33:05 发布
关键词由CSDN通过智能技术生成