1.第一部分使用PHP ZipArchive类压缩目录
2.第二部分开启php_zip.dll配置
function zip(){
$files = array(ROOT_PATH.'/public/Uploads/');
//$files = array('upload/qrcode/1/1.jpg');
$zipFile = ROOT_PATH.'/public/upload/download/'.date("Ymd").'/';
$zipName = $zipFile.uniqid().'.zip';
$zip = new \ZipArchive();
if( !file_exists($zipFile) ) mkdir($zipFile, 0777, true);
$res = $zip->open($zipName, \ZipArchive::OVERWRITE | \ZipArchive::CREATE);
if($res)
{
$this->compressDir($files[0],$zip);
$zip->close();
}
if(!file_exists($zipName)){
exit("无法找到文件"); //即使创建,仍有可能失败
}
//如果不要下载,下面这段删掉即可,如需返回压缩包下载链接,只需 return $zipName;
header("Cache-Control: public");
header("Content-Description: File Transfer");
header('Content-disposition: attachment; filename='.basename($zipName)); //文件名
header("Content-Type: application/zip"); //zip格式的
header("Content-Transfer-Encoding: binary"); //告诉浏览器,这是二进制文件
header('Content-Length: '. filesize($zipName)); //告诉浏览器,文件大小
@readfile($zipName);
exit();
}
function compressDir($files, $zip, $prev='')
{
$handler = opendir($files);
$basename = basename($files);
$zip->addEmptyDir($prev . '/' . $basename);
while($file = readdir($handler))
{
$realpath = $files . '/' . $file;
if(is_dir($realpath))
{
if($file !== '.' && $file !== '..')
{
$zip->addEmptyDir($prev . '/' . $basename . '/' . $file);
$this->compressDir($realpath, $zip, $prev . '/' . $basename);
}
}else
{
$zip->addFile($realpath, $prev. '/' . $basename . '/' . $file);
}
}
closedir($handler);
return null;
}
Windows环境:
1.首先需要从官网上下载,下载地址 https://windows.php.net/downloads/pecl/releases/zip/
2.打开官网列表后需要查找适合自己的PHP版本和系统的zip,我的PHP版本是5.5的,这里我选择的版本号是1.13.5
3.下载完后解压,把里面的php_zip.dll文件放到PHP的扩展文件夹里
扩展文件夹路径一般都是在PHP版本文件夹里的ext文件夹,譬如我的就是D:\phpStudy\PHPTutorial\php\php-7.1.13-nts\ext
4.把php_zip.dll文件放进去后,打开PHP的配置文件php.ini,添加extension=php_zip.dll,保存后,重启apache服务器
Linux环境:
1、在Linux下没有php_zip.dll这个文件(有也不会起作用的),所以需要重新编译一下php的zip模块。具体安装方法如下:
cd /usr/src
wget http://pecl.php.net/get/zip
tar -zxvf zip
cd zip-1.x.x
phpize
./configure
make
sudo make instal
其中, 在最后使用make install命令的时候,可能需要用到root的权限,所以建议使用sudo来运行。安装完之后,屏幕上会提示zip.so的位置。然后将其记录下来,如:/usr/local/lib/php/extensions/zip.so。
2、使用root权限修改php.ini(通常可能会在/usr/local/lib/文件夹下,不过视当初安装php而定,可以通过phpinfo()来查看):
增加extension = /usr/local/lib/php/extensions/zip.so,然后同样在php.ini文件中,将 zlib.output_compression = Off 改为 zlib.output_compression = On ;
3、最后别忘了重启一下Apache:apachectl restart;
这个针对php的zip模块就安装完成了,能够在php中使用ZipArchive类了。
ps:查看php.ini文件位置的方法是: