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

本文介绍了如何在PHP环境中使用ZipArchive类进行文件的上传和下载操作,包括服务器环境的配置(确保zlib和zip扩展的安装),以及如何创建、压缩和解压文件。实践部分详细展示了文件下载、上传以及解压后的文件移动过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

教程下载地址: 网赚博客http://www.piaodoo.com/创业项目排行榜前十名http://www.piaodoo.com/


概述

在很多实际生产场景都需要批量上传、下载一些文件的处理,整理了使用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(KaTeX parse error: Expected '}', got 'EOF' at end of input: … mkdir(dirname(destination), 0777, true);
}

z i p = n e w Z i p A r c h i v e ; i f ( zip = new ZipArchive; if ( zip=newZipArchive;if(zip->open($destination, ZIPARCHIVE::CREATE) !== true) {
echo ‘服务器错误’.PHP_EOL;
}

$filePath = ‘/server_images/data/劳务派遣协议.pdf’;

f i l e S u f f i x = p a t h i n f o ( fileSuffix = pathinfo( fileSuffix=pathinfo(filePath,PATHINFO_EXTENSION); // 输出 pdf
f i l e N a m e = p a t h i n f o ( fileName = pathinfo( fileName=pathinfo(filePath, PATHINFO_FILENAME); // 输出 劳务派遣协议
$rename = ‘stark_’ . f i l e N a m e . ′ . ′ . fileName.'.'. fileName...fileSuffix; //新名字

#把路径 f i l e P a t h 生成到 z i p 包中 , filePath 生成到zip包中, filePath生成到zip包中,rename是新的文件名
KaTeX parse error: Expected 'EOF', got '&' at position 5: zip-&̲gt;addFile(filePath, $rename );

创建目录的路径

$createPathName = ‘’;
KaTeX parse error: Expected 'EOF', got '&' at position 5: zip-&̲gt;addEmptyDir(createPathName);
$zip->close();

$strFile = ‘劳务派遣协议.zip’;
header(“Content-type:application/zip”);
header(“Content-Disposition:attachment;filename=” . s t r F i l e ) ; r e a d f i l e ( strFile); readfile( 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';

z i p = n e w Z i p A r c h i v e ; i f ( zip = new ZipArchive; if ( zip=newZipArchive;if(zip->open($destination, ZIPARCHIVE::CREATE) !== true) {
echo ‘服务器错误’.PHP_EOL;
}

//解压到目标目录 $extractDir
e x t r a c t D i r = ′ / h o m e / w w w r o o t / z i p ′ ; i f ( ! i s d i r ( extractDir = '/home/wwwroot/zip'; if (!is_dir( extractDir=/home/wwwroot/zip;if(!isdir(extractDir)) {
mkdir($extractDir, 0777, true);
}

KaTeX parse error: Expected 'EOF', got '&' at position 5: zip-&̲gt;extractTo(extractDir);
$zip->close();

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

$zipName = 'labor_con2';
$realExtractDir = $extractDir.'/'.$zipName.'/';
$folders = scandir($realExtractDir);

//把$extractToPath 移动到 $targetSrc位置
t a r g e t D i r = ′ / s e r v e r i m a g e s / d a t a / t a r g e t / ′ ; i f ( ! i s d i r ( targetDir = '/server_images/data/target/'; if (!is_dir( targetDir=/serverimages/data/target/;if(!isdir(targetDir)) {
mkdir($targetDir, 0777, true);
}

foreach ( $folders as KaTeX parse error: Expected '}', got 'EOF' at end of input: … 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文件上传下载内容请搜索网赚博客http://www.piaodoo.com/以前的文章或继续浏览下面的相关文章希望大家以后多多支持网赚博客http://www.piaodoo.com/!

                        友情连接:  

茂名一技http://www.szsyby.net/


茂名一技http://www.enechn.com/


美文集http://www.tpyjn.cn/


手游排行前十名http://www.bjkhrx.com/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值