当前位置:首页 > PHP教程 > php上传下载 > 列表

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

发布:smiling 来源: PHP粉丝网  添加日期:2024-05-18 16:32:05 浏览: 评论:0 

在很多实际生产场景都需要批量上传、下载一些文件的处理,整理了使用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.  
  4. #查看是否安装zlib包 
  5. yum list installed | grep zlib 
  6.  
  7.  
  8. php-fpm -m | grep zip 
  9. zip 
  10.  
  11. $zipVersion = phpversion('zip'); 
  12. echo "Zip Extension Version: " . $zipVersion.PHP_EOL; 
  13.  
  14. # 输出结果  
  15. # Zip Extension Version: 1.15.6 

实践

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

目录和文件的权限,包括复制的源文件和目标文件

移动的文件夹一定要存在

ZipArchive扩展所需要的zlib和zip扩展,注意版本的差异性

文件下载

文件下载相对比较容易,先创建一个空的zip包,在把需要压缩的文件添加进zip包里。

  1. //压缩包生成的路径,最后文件添加在这个zip包中 
  2. $destination = '/home/wwwroot/testDemo.zip'
  3.  
  4. if (!file_exists(dirname($destination))) { 
  5.     mkdir(dirname($destination), 0777, true); 
  6.  
  7. $zip = new ZipArchive; 
  8. if ($zip->open($destination, ZIPARCHIVE::CREATE) !== true) { 
  9.     echo '服务器错误'.PHP_EOL; 
  10.  
  11. $filePath = '/server_images/data/劳务派遣协议.pdf'
  12.  
  13. $fileSuffix = pathinfo($filePath,PATHINFO_EXTENSION); // 输出 pdf 
  14. $fileName = pathinfo($filePath, PATHINFO_FILENAME);   // 输出 劳务派遣协议 
  15. $rename = 'stark_' . $fileName.'.'.$fileSuffix//新名字 
  16.  
  17. #把路径$filePath 生成到zip包中,$rename是新的文件名 
  18. $zip->addFile($filePath,  $rename ); 
  19.  
  20. # 创建目录的路径 
  21. $createPathName = ''
  22. $zip->addEmptyDir($createPathName); 
  23. $zip->close(); 
  24.  
  25. $strFile = '劳务派遣协议.zip'
  26. header("Content-type:application/zip"); 
  27. header("Content-Disposition:attachment;filename=" . $strFile); 
  28. readfile($destination); 

文件上传

1、文件上传相对比较麻烦,首先要把文件移动到指定的目录下,demo中的例子是$file_path

  1. $file_path = '/home/wwwroot/upload/'
  2. if (!is_dir(dirname($file_path))) { 
  3.     mkdir(dirname($file_path), 0777, true); 
  4. //把文件移动到$file_path目录里 
  5. ifis_uploaded_file($_FILES['file']['tmp_name']) ) { 
  6.     $move_re = move_uploaded_file($_FILES['file']['tmp_name'], $file_path); 
  7.  
  8.     if (!$move_re) { 
  9.         echo '上传失败'.PHP_EOL; 
  10.     } 
  11. }else
  12.     echo '请检查数据来源'.PHP_EOL; 

2、对压缩包进行解压

  1. $destination = '/home/wwwroot/labor_con2.zip'
  2.  
  3. $zip = new ZipArchive; 
  4. if ($zip->open($destination, ZIPARCHIVE::CREATE) !== true) { 
  5.     echo '服务器错误'.PHP_EOL; 
  6.  
  7. //解压到目标目录 $extractDir 
  8. $extractDir = '/home/wwwroot/zip'
  9. if (!is_dir($extractDir)) { 
  10.     mkdir($extractDir, 0777, true); 
  11.  
  12. $zip->extractTo($extractDir); 
  13. $zip->close(); 

3、把解压的文件移动到目标的资源文件夹里

  1. $zipName = 'labor_con2'
  2. $realExtractDir = $extractDir.'/'.$zipName.'/'
  3. $folders = scandir($realExtractDir); 
  4.  
  5. //把$extractToPath 移动到 $targetSrc位置 
  6. $targetDir = '/server_images/data/target/'
  7. if (!is_dir($targetDir)) { 
  8.     mkdir($targetDir, 0777, true); 
  9.  
  10. foreach ( $folders as $file){ 
  11.     if(!in_array($file,['.','..','.DS_Store'])){ 
  12.  
  13.         $sourceSrc = $realExtractDir.$file
  14.         $targetSrc = $targetDir.$file
  15.  
  16.         if (file_exists($sourceSrc)) chmod($sourceSrc, 0755); 
  17.         if (file_exists($targetSrc)) chmod($targetSrc, 0755); 
  18.  
  19.         $result = copy($sourceSrc$targetSrc); 
  20.         if($result){ 
  21.             echo '文件复制成功了'.PHP_EOL; 
  22.         } 
  23.     } 
  24. }

Tags: ZipArchive文件上传 ZipArchive文件下载

分享到: