需要用到php扩展ZipArchive
官网下载 https://windows.php.net/downloads/pecl/releases/zip/
我是 php5.6 nts版本 64位windows系统(linux不用dll) ,下载之后把php_zip.dll丢进php目录下ext文件夹里
在php.ini中添加一行extension=php_zip.dll重启nginx即可
代码部分
$zip = new ZipArchive(); copy('temp.zip','images.zip'); if ($zip->open('images.zip', ZipArchive::OVERWRITE) === TRUE) { addFileToZip('sucai/', $zip); //调用方法,对要打包的根目录进行操作,并将ZipArchive的对象传递给方法 $zip->close(); //关闭处理的zip文件 download_unlick_zip('images.zip'); } function download_unlick_zip($file_name){ $fp = fopen($file_name,"r"); $file_size = filesize($file_name);//获取文件的字节 //下载文件需要用到的头 Header("Content-type: application/octet-stream"); Header("Accept-Ranges: bytes"); Header("Accept-Length:".$file_size); Header("Content-Disposition: attachment; filename=$file_name"); $buffer=1024; //设置一次读取的字节数,每读取一次,就输出数据(即返回给浏览器) $file_count=0; //读取的总字节数 //向浏览器返回数据 如果下载完成就停止输出,如果未下载完成就一直在输出。根据文件的字节大小判断是否下载完成 while(!feof($fp) && $file_count<$file_size){ $file_con=fread($fp,$buffer); $file_count+=$buffer; echo $file_con; } fclose($fp); //下载完成后删除压缩包,临时文件夹 if($file_count >= $file_size){ unlink($file_name); } } function addFileToZip($path, $zip) { $handler = opendir($path); //打开当前文件夹由$path指定。 while (($filename = readdir($handler)) !== false) { if ($filename != "." && $filename != "..") {//文件夹文件名字为'.'和‘..’,不要对他们进行操作 if (is_dir($path . "/" . $filename)) {// 如果读取的某个对象是文件夹,则递归 addFileToZip($path . "/" . $filename, $zip); } else { //将文件加入zip对象 $zip->addFile($path . "/" . $filename); } } } @closedir($path); }