首页 > 编程语言 >php 开启 ziparchive,php ZipArchive类使用实例

php 开启 ziparchive,php ZipArchive类使用实例

时间:2023-04-10 16:11:07浏览次数:30  
标签:ziparchive zip zipfile filename ZipArchive source file php dir

### 批量压缩文件并下载zip示例

function deleteDir($dirName)
{

if(file_exists($dirName)){//判断目录是否存在
//如果是目录,那么我们就遍历下面的文件或者目录
//打开目录句柄
$dir = opendir($dirName);
while($fileName = readdir($dir)){
//不运行像上级目录运行
if($fileName!="." && $fileName!=".."){
$file = $dirName."/".$fileName;
echo "||".$file."||";
if(is_dir($file)){
deleteDir($file);//使用递归删除目录
}else{
echo "--delete-".$file."++";
unlink($file);
}
}
}
closedir($dir);//关闭dir

if( rmdir( $dirName ) )echo "成功删除目录: $dirName";

}else{
echo "对不起,目录不存在";
}
}

$source = __DIR__.'/test';
$files = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($source));


$zip = new ZipArchive();
$zipfile = $source . '.zip';
if (!$zip->open($zipfile, ZipArchive::CREATE)) {
echo '压缩包创建失败';
exit;
}

foreach($files as $file){
$file = str_replace('\\', '/', $file);
//忽略当前目录和上级目录
if (in_array(substr($file, strrpos($file, '/') + 1), array('.', '..'))) {
continue;
}
if (is_dir($file) === true) {
//创建一个子目录
$zip->addEmptyDir(str_replace($source . '/', '', $file . '/'));
} else if (is_file($file) === true) {
//创建一个子文件
$zip->addFromString(str_replace($source . '/', '', $file), file_get_contents($file));
} else if (is_file($source) === true) {
//创建文件根目录下的文件
$zip->addFromString(basename($source), file_get_contents($source));
}
}


$zip->close();
//返回文件类型
$ua = $_SERVER["HTTP_USER_AGENT"];
Header('Content-type: application/zip');
//返回文件的字节大小
Header('Accept-Range: bytes');
Header("Content-Transfer-Encoding: Binary");
//返回文件大小
Header('Accept-Length: ' . filesize($zipfile));
header('Cache-Control: max-age=0');
//这里对客户端弹出的对话框,对应的文件名
$basename = preg_replace('/^.+[\\\\\\/]/', '', $zipfile);
$encode_filename = urlencode($basename);
if (preg_match("/Firefox/", $ua)) {
header('Content-Disposition: attachment; filename="' . $basename . '"');
} else if (preg_match("/Chrome/", $ua)) {

header('Content-Disposition: attachment; filename="' . $encode_filename. '"');
} else {

$encoded_filename = str_replace("+", "%20", $encode_filename);

header('Content-Disposition: attachment; filename="' . $encode_filename. '"');
}
@readfile($zipfile);
//删除文件
unlink($zipfile);
deleteDir($source);
exit;

标签:ziparchive,zip,zipfile,filename,ZipArchive,source,file,php,dir
From: https://www.cnblogs.com/songcheng-nick/p/17303256.html

相关文章

  • php连接mysql 的错误:用户密码使用了旧版本的加密方式
    CannotconnecttoDatabase,pleasecheckyourconfiguration:错误代号:2000 mysqlndcannotconnecttoMySQL4.1+usingtheoldinsecureauthentication.PleaseuseanadministrationtooltoresetyourpasswordwiththecommandSETPASSWORD=PASSWORD('you......
  • 利用 curl 发送 post/get/del/put/patch 请求 PHP
    因为需要在php开发中对接其它接口需要用phpcurl去对接其它接口我把他们封装成函数。这里面是封装好的会自动把data进行转成json格式,同时解码成php数组输出get请求:<?phpfunctiongeturl($url){$headerArray=array("Content-type:application/json;","Acc......
  • php 的 api 接口
    在实际工作中,使用PHP写api接口是经常做的,PHP写好接口后,前台就可以通过链接获取接口提供的数据,而返回的数据一般分为两种情况,xml和json,在这个过程中,服务器并不知道,请求的来源是什么,有可能是别人非法调用我们的接口,获取数据,因此就要使用安全验证。验证原理示意图原理从图中......
  • [从0开始]PHP+phpstudy留言板项目搭建教程及报错详析
    [从0开始]PHP+phpstudy留言板项目搭建教程及报错详析基础知识及工具准备基础知识:四种语言PHPPHP是在服务器端执行的脚本语言,适用于Web开发并可嵌入HTML中。学习网站:PHP教程|菜鸟教程SQLSQL是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统......
  • 《渗透测试》安全开发-PHP应用&留言板功能&超全局变量&数据库操作&第三方插件引用 202
    PHPStorm:专业PHP开发IDEPhpStudy:ApacheMYSQL环境NavicatPremium:全能数据库管理工具 #数据导入-mysql架构&库表列1、数据库名,数据库表名,数据库列名2、数据库数据,格式类型,长度,键等 #数据库操作-mysqli函数&增删改查PHP函数:连接,选择,执行,结果,关闭等参考:https://......
  • PHP实现随机图片API
    分享两种PHP随机图片源码,第一种访问本地图片,第二种访问图片链接,代码如下:<!--资源宝分享:www.httple.net--><?phpheader('Cache-Control:no-cache,must-revalidate');header('Pragma:no-cache');header("Expires:0");header("Access-Control-Allow-Origin:*&......
  • PHP代码实现网页缓存
    PHP程序在抵抗大流量访问的时候动态网站往往都是难以招架,所以要引入缓存机制,一般情况下有两种类型缓存:一、文件缓存二、数据查询结果缓存,使用内存来实现高速缓存本例主要使用文件缓存,主要原理使用缓存函数来存储网页显示结果,如果在规定时间里再次调用则可以加载缓存文件。类代码://......
  • 【web 开发基础】PHP 的流程控制之嵌套(巢状)条件分支结构 -PHP 快速入门 (15)
    嵌套条件分支结构嵌套条件分支结构,也称为巢状条件分支结构。其实就是将if语句进行嵌套,即是在if或者else后面的语句块中又包含if语句。if语句可以无限层第嵌套在其他if语句中,这给程序的不同部分的条件执行提供了充分的弹性,是程序设计中经常使用的技术。其语法格式如下所示:if(表达式1......
  • PHP 通过创建临时表实现更高速的IN查询
    /***xmsb_fastIn通过创建临时表实现更高速的IN查询*@returnarray*/functionxmsb_fastIn($tb_name,//要执行in查询的表名$field_name,//要执行in查询的字段名$data_array,//in查询的条件数据集$not_i......
  • PHPCMS粘贴图片自动上传到服务器(Java版)
    ​ 这种方法是servlet,编写好在web.xml里配置servlet-class和servlet-mapping即可使用后台(服务端)java服务代码:(上传至ROOT/lqxcPics文件夹下)<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%><%@     page contentType="text/html;cha......