设为首页收藏本站
天天打卡

 找回密码
 立即注册
搜索
查看: 94|回复: 20

PHP操作ZipArchive实现文件上传下载功能

[复制链接]

3

主题

60

回帖

188

积分

注册会员

积分
188
发表于 2024-4-19 20:15:26 | 显示全部楼层 |阅读模式
目录


概述

在很多实际生产场景都需要批量上传、下载一些文件的处理,整理了使用PHP语言操作ZipArchive实践和实例,ZipArchive需要服务器上安装zlib库,php扩展中安装zip扩展。

服务器环境扩展

ZipArchive类库的PHP版本要求如下,另外php需要查看是否已经成功安装zip扩展,服务器上需要安装zlib包,具体查看方法在下面的代码段里。
  1. # ZipArchive 类版本要求,来自官网
  2. # (PHP 5 >= 5.2.0, PHP 7, PHP 8, PECL zip >= 1.1.0)

  3. #查看是否安装zlib包
  4. yum list installed | grep zlib


  5. php-fpm -m | grep zip
  6. zip

  7. $zipVersion = phpversion('zip');
  8. echo "Zip Extension Version: " . $zipVersion.PHP_EOL;

  9. # 输出结果
  10. # Zip Extension Version: 1.15.6
复制代码
实践

ZipArchive类,使用范围非常丰富,这篇博客里主要介绍上传和下载功能,先整理下载的实践实例,有几点需要特别注意的点:

  • 目录和文件的权限,包括复制的源文件和目标文件
  • 移动的文件夹一定要存在
  • ZipArchive扩展所需要的zlib和zip扩展,注意版本的差异性

文件下载

文件下载相对比较容易,先创建一个空的zip包,在把需要压缩的文件添加进zip包里。
  1. //压缩包生成的路径,最后文件添加在这个zip包中
  2. $destination = '/home/wwwroot/testDemo.zip';

  3. if (!file_exists(dirname($destination))) {
  4.     mkdir(dirname($destination), 0777, true);
  5. }

  6. $zip = new ZipArchive;
  7. if ($zip->open($destination, ZIPARCHIVE::CREATE) !== true) {
  8.     echo '服务器错误'.PHP_EOL;
  9. }

  10. $filePath = '/server_images/data/劳务派遣协议.pdf';

  11. $fileSuffix = pathinfo($filePath,PATHINFO_EXTENSION); // 输出 pdf
  12. $fileName = pathinfo($filePath, PATHINFO_FILENAME);   // 输出 劳务派遣协议
  13. $rename = 'stark_' . $fileName.'.'.$fileSuffix; //新名字

  14. #把路径$filePath 生成到zip包中,$rename是新的文件名
  15. $zip->addFile($filePath,  $rename );

  16. # 创建目录的路径
  17. $createPathName = '';
  18. $zip->addEmptyDir($createPathName);
  19. $zip->close();

  20. $strFile = '劳务派遣协议.zip';
  21. header("Content-type:application/zip");
  22. header("Content-Disposition:attachment;filename=" . $strFile);
  23. readfile($destination);
复制代码
文件上传

1、文件上传相对比较麻烦,首先要把文件移动到指定的目录下,demo中的例子是
  1. $file_path
复制代码
  1. $file_path = '/home/wwwroot/upload/';
  2. if (!is_dir(dirname($file_path))) {
  3.     mkdir(dirname($file_path), 0777, true);
  4. }
  5. //把文件移动到$file_path目录里
  6. if( is_uploaded_file($_FILES['file']['tmp_name']) ) {
  7.     $move_re = move_uploaded_file($_FILES['file']['tmp_name'], $file_path);

  8.     if (!$move_re) {
  9.         echo '上传失败'.PHP_EOL;
  10.     }
  11. }else{
  12.     echo '请检查数据来源'.PHP_EOL;
  13. }
复制代码
2、对压缩包进行解压
  1. $destination = '/home/wwwroot/labor_con2.zip';

  2. $zip = new ZipArchive;
  3. if ($zip->open($destination, ZIPARCHIVE::CREATE) !== true) {
  4.     echo '服务器错误'.PHP_EOL;
  5. }

  6. //解压到目标目录 $extractDir
  7. $extractDir = '/home/wwwroot/zip';
  8. if (!is_dir($extractDir)) {
  9.     mkdir($extractDir, 0777, true);
  10. }

  11. $zip->extractTo($extractDir);
  12. $zip->close();
复制代码
3、把解压的文件移动到目标的资源文件夹里
  1. $zipName = 'labor_con2';
  2. $realExtractDir = $extractDir.'/'.$zipName.'/';
  3. $folders = scandir($realExtractDir);

  4. //把$extractToPath 移动到 $targetSrc位置
  5. $targetDir = '/server_images/data/target/';
  6. if (!is_dir($targetDir)) {
  7.     mkdir($targetDir, 0777, true);
  8. }

  9. foreach ( $folders as $file){
  10.     if(!in_array($file,['.','..','.DS_Store'])){

  11.         $sourceSrc = $realExtractDir.$file;
  12.         $targetSrc = $targetDir.$file;

  13.         if (file_exists($sourceSrc)) chmod($sourceSrc, 0755);
  14.         if (file_exists($targetSrc)) chmod($targetSrc, 0755);

  15.         $result = copy($sourceSrc, $targetSrc);
  16.         if($result){
  17.             echo '文件复制成功了'.PHP_EOL;
  18.         }
  19.     }
  20. }
复制代码
到此这篇关于PHP操作ZipArchive实现文件上传下载功能的文章就介绍到这了,更多相关PHP ZipArchive文件上传下载内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
  • 打卡等级:无名新人
  • 打卡总天数:1
  • 打卡月天数:0
  • 打卡总奖励:21
  • 最近打卡:2024-05-25 21:32:01

2

主题

59

回帖

184

积分

注册会员

积分
184
发表于 2024-4-20 14:05:23 | 显示全部楼层
666666666666666666

1

主题

85

回帖

217

积分

中级会员

积分
217

热心会员付费会员

发表于 2024-4-23 12:52:41 | 显示全部楼层
说得太好了,完全同意!
  • 打卡等级:即来则安
  • 打卡总天数:27
  • 打卡月天数:0
  • 打卡总奖励:424
  • 最近打卡:2024-08-20 23:24:38

6

主题

58

回帖

722

积分

高级会员

积分
722
发表于 2024-4-28 07:56:00 来自手机 | 显示全部楼层
谢谢楼主分享

0

主题

53

回帖

104

积分

注册会员

积分
104
发表于 2024-4-28 23:53:33 | 显示全部楼层
这个话题很有趣,我想多了解一些

2

主题

56

回帖

158

积分

注册会员

积分
158
发表于 2024-5-24 18:52:55 | 显示全部楼层
同意!

1

主题

51

回帖

125

积分

注册会员

积分
125
发表于 2024-5-24 23:25:21 | 显示全部楼层
谢谢你分享这个信息

1

主题

52

回帖

125

积分

注册会员

积分
125
发表于 2024-6-30 08:54:06 | 显示全部楼层
已测试,非常不错

0

主题

44

回帖

88

积分

注册会员

积分
88
发表于 2024-7-9 13:59:45 | 显示全部楼层
确实牛逼

1

主题

62

回帖

148

积分

注册会员

积分
148
发表于 2024-7-24 11:59:46 | 显示全部楼层
我完全同意你的观点
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|爱云论坛 - d.taiji888.cn - 技术学习 免费资源分享 ( 蜀ICP备2022010826号 )|天天打卡

GMT+8, 2024-11-24 08:50 , Processed in 0.103331 second(s), 27 queries .

Powered by i云网络 Licensed

© 2023-2028 正版授权

快速回复 返回顶部 返回列表