windows环境PHP调用DotNetZipLib处理zip64文件

来源:互联网 发布:nba2k17捏脸数据中国人 编辑:程序博客网 时间:2024/06/05 23:06

项目功能:web系统为整个项目系统的软件提供自动升级功能

具体流程:用户在web系统上传更新文件,然后PHP将文件压缩为zip包,C#编写的客户端服务软件下载该zip包并解压到相应的软件目录进行软件更新

功能问题:PHP的zipArchive类只能支持常规zip文件的压缩,而C#客户端需要zip64格式的压缩文件,所以我们这里需要用PHP的COM类来加载DotNetZipLib的Ionic.Zip.ZipFile库


系统环境

系统:windows

php版本:5.3.8

说明:如果是php5.3.15之后的版本需要下载php的zip-source包将ext目录的php_com_dotnet.dll扩展加入进去

DotNetZipLib包下载:http://dotnetzip.codeplex.com/releases/view/68268


第一步 将DotNetZip注册为COM组件

用到的工具:

gacutil.exe 下载:http://pan.baidu.com/share/link?shareid=477269&uk=704879932

regasm.exe 下载:http://pan.baidu.com/share/link?shareid=477270&uk=704879932

1、将DotNetZipLib包解压之后zip-v1.9/Release目录下的Ionic.Zip.dll文件复制到C:\目录下,下载

2、开始->运行->cmd 切换到C盘  cd C:\

3、安装到GAC  gacutil -i Ionic.Zip.dll

如果提示缺少MSVCR70.dll请下载http://pan.baidu.com/share/link?shareid=478218&uk=704879932 解压复制到C:\WINDOWS\SYSTEM32目录下

4、注册到COM组件服务  regasm Ionic.Zip.dll

如果下载的regasm.exe注册出错,那进入C:\WINDOWS\Microsoft.NET\Framework\v.xxx目录找到RegAsm.exe,用该程序注册COM服务

完成之后Ionic.Zip.dll就可以当做COM组件服务被PHP的COM类调用了


第二步 启用PHP的COM扩展

参考文章:http://blog.csdn.net/luochuan/article/details/8806689


编写PHP代码调用Ionic.Zip.ZipFile类生成ZIP文件

创建zip文件 zipfile.php

<?php//创建zip文件try {echo '<html>';echo '  <head>';echo '  <title>Calling .NET from PHP through COM</title>';echo '  <meta content="text/html; charset=GB2312" http-equiv="Content-Type">';echo '  </head>';echo '<body>';echo '<h2>Hello!</h2>' . "<br/>\n";echo '<h4>Trying static method</h4>' . "<br/>\n";$filename = "archive-" . date('Y-m-d_His') . ".zip";echo 'Dynamically generated archive name: ' . "\n" . '<h4>' . $filename . "</h4>\n";$zipFile = "c:/xampp/htdocs/" . $filename;//COM类加载Ionic.Zip.ZipFile动态库$zip = new COM("Ionic.Zip.ZipFile");//定义文件名$zip->name = $zipFile;//加密等级为0不加密 值为3则需要密码$zip->Encryption = 0;//密码不需要// $zip->Password = "";//用zip64方式压缩文件$zip->UseZip64WhenSaving = 2;//设置要压缩的目录$dirToZip= "c:/xampp/htdocs/work";$zip->AddDirectory($dirToZip);//执行压缩操作$zip->Save();echo '<br/>The file was saved to ' . $zip->Name . '<br/>' . "\n";$zip->Dispose();echo '</body>';echo '</html>';} catch (Exception $e) {echo 'Caught exception: ',  $e->getMessage(), "\n";echo '<pre>';echo $e->getTraceAsString(), "\n";echo '</pre>';}


解压zip文件unzipfile.php

<?php//解压zip文件try {echo '<html>';echo '  <head>';echo '  <title>Calling .NET from PHP through COM</title>';echo '  <meta content="text/html; charset=GB2312" http-equiv="Content-Type">';echo '  </head>';echo '<body>';echo '<h2>Hello!</h2>' . "<br/>\n";echo '<h4>Trying static method</h4>' . "<br/>\n";$zipDir = "c:/xampp/htdocs/";$zipFile = "archive-2013-04-16.zip";//COM类加载Ionic.Zip.ZipFile动态库$zip = new COM("Ionic.Zip.ZipFile");//初始化zip文件$zip->Initialize($zipDir.$zipFile);//解压zip文件$zip->ExtractAll($zipDir);//处理过程$zip->Dispose();echo '<h2>Unzip Success!</h2>' . "<br/>\n";echo '</body>';echo '</html>';} catch (Exception $e) {echo 'Caught exception: ',  $e->getMessage(), "\n";echo '<pre>';echo $e->getTraceAsString(), "\n";echo '</pre>';}



参考资料:http://dotnetzip.herobo.com/DNZHelp/Code%20Examples/COM.htm




原创粉丝点击