-
PHP操作ZipArchive实现文件上传下载功能
在很多实际生产场景都需要批量上传、下载一些文件的处理,本文将利用PHP ZipArchive实现文件上传下载功能,有需要的小伙伴可以参考一下
概述
在很多实际生产场景都需要批量上传、下载一些文件的处理,整理了使用PHP语言操作ZipArchive实践和实例,ZipArchive需要服务器上安装zlib库,php扩展中安装zip扩展。
服务器环境扩展
ZipArchive类库的PHP版本要求如下,另外php需要查看是否已经成功安装zip扩展,服务器上需要安装zlib包,具体查看方法在下面的代码段里。
# ZipArchive 类版本要求,来自官网
# (PHP 5 >= 5.2.0, PHP 7, PHP 8, PECL zip >= 1.1.0)
#查看是否安装zlib包
yum list installed | grep zlib
php-fpm -m | grep zip
zip
$zipVersion = phpversion('zip');
echo "Zip Extension Version: " . $zipVersion.PHP_EOL;
# 输出结果
# Zip Extension Version: 1.15.6
实践
ZipArchive类,使用范围非常丰富,这篇博客里主要介绍上传和下载功能,先整理下载的实践实例,有几点需要特别注意的点:
目录和文件的权限,包括复制的源文件和目标文件
移动的文件夹一定要存在
ZipArchive扩展所需要的zlib和zip扩展,注意版本的差异性
文件下载
文件下载相对比较容易,先创建一个空的zip包,在把需要压缩的文件添加进zip包里。
//压缩包生成的路径,最后文件添加在这个zip包中
$destination = '/home/wwwroot/testDemo.zip';
if (!file_exists(dirname($destination))) {
mkdir(dirname($destination), 0777, true);
}
$zip = new ZipArchive;
if ($zip->open($destination, ZIPARCHIVE::CREATE) !== true) {
echo '服务器错误'.PHP_EOL;
}
$filePath = '/server_images/data/劳务派遣协议.pdf';
$fileSuffix = pathinfo($filePath,PATHINFO_EXTENSION); // 输出 pdf
$fileName = pathinfo($filePath, PATHINFO_FILENAME); // 输出 劳务派遣协议
$rename = 'stark_' . $fileName.'.'.$fileSuffix; //新名字
#把路径$filePath 生成到zip包中,$rename是新的文件名
$zip->addFile($filePath, $rename );
# 创建目录的路径
$createPathName = '';
$zip->addEmptyDir($createPathName);
$zip->close();
$strFile = '劳务派遣协议.zip';
header("Content-type:application/zip");
header("Content-Disposition:attachment;filename=" . $strFile);
readfile($destination);
文件上传
1、文件上传相对比较麻烦,首先要把文件移动到指定的目录下,demo中的例子是$file_path
$file_path = '/home/wwwroot/upload/';
if (!is_dir(dirname($file_path))) {
mkdir(dirname($file_path), 0777, true);
}
//把文件移动到$file_path目录里
if( is_uploaded_file($_FILES['file']['tmp_name']) ) {
$move_re = move_uploaded_file($_FILES['file']['tmp_name'], $file_path);
if (!$move_re) {
echo '上传失败'.PHP_EOL;
}
}else{
echo '请检查数据来源'.PHP_EOL;
}
2、对压缩包进行解压
$destination = '/home/wwwroot/labor_con2.zip';
$zip = new ZipArchive;
if ($zip->open($destination, ZIPARCHIVE::CREATE) !== true) {
echo '服务器错误'.PHP_EOL;
}
//解压到目标目录 $extractDir
$extractDir = '/home/wwwroot/zip';
if (!is_dir($extractDir)) {
mkdir($extractDir, 0777, true);
}
$zip->extractTo($extractDir);
$zip->close();
3、把解压的文件移动到目标的资源文件夹里
$zipName = 'labor_con2';
$realExtractDir = $extractDir.'/'.$zipName.'/';
$folders = scandir($realExtractDir);
//把$extractToPath 移动到 $targetSrc位置
$targetDir = '/server_images/data/target/';
if (!is_dir($targetDir)) {
mkdir($targetDir, 0777, true);
}
foreach ( $folders as $file){
if(!in_array($file,['.','..','.DS_Store'])){
$sourceSrc = $realExtractDir.$file;
$targetSrc = $targetDir.$file;
if (file_exists($sourceSrc)) chmod($sourceSrc, 0755);
if (file_exists($targetSrc)) chmod($targetSrc, 0755);
$result = copy($sourceSrc, $targetSrc);
if($result){
echo '文件复制成功了'.PHP_EOL;
}
}
}
到此这篇关于PHP操作ZipArchive实现文件上传下载功能的文章就介绍到这了,更多相关PHP ZipArchive文件上传下载内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持
原文链接:https://juejin.cn/post/7350555794147262501
栏目列表
最新更新
vbs能调用的系统对象小结
vbscript网页模拟登录效果代码
VBScript 根据IE窗口的标题输出ESC
杀死指定进程名称的小VBS
通过vbs修改以点结尾的文件的属性为隐藏
查询电脑开关机时间的vbs代码
VBA中的Timer函数用法
ComboBox 控件的用法教程
在windows 64位操作系统上运行32位的vbscri
无法执行vbs脚本中遇到的问题及解决方案
SQL SERVER中递归
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
uniapp/H5 获取手机桌面壁纸 (静态壁纸)
[前端] DNS解析与优化
为什么在js中需要添加addEventListener()?
JS模块化系统
js通过Object.defineProperty() 定义和控制对象
这是目前我见过最好的跨域解决方案!
减少回流与重绘
减少回流与重绘
如何使用KrpanoToolJS在浏览器切图
performance.now() 与 Date.now() 对比