PHP操作ZipArchive实现文件上传下载功能
发布:smiling 来源: PHP粉丝网 添加日期:2024-05-18 16:32:05 浏览: 评论:0
在很多实际生产场景都需要批量上传、下载一些文件的处理,整理了使用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;
- }
- }
- }
Tags: ZipArchive文件上传 ZipArchive文件下载
- 上一篇:CKEditor4结合php实现上传图片功能
- 下一篇:最后一页
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)