PHP 4.4.7 中用 PEAR 类库操作 ZIP 压缩文件-阿里云开发者社区

开发者社区> 技术小美> 正文

PHP 4.4.7 中用 PEAR 类库操作 ZIP 压缩文件

简介:
+关注继续查看

运行 pear install Archive_Tar 命令可以安装 PEAR 的 Tar 的操作类,但是 Tar 文件是个打包归档文件,并没有压缩而使文件占用的空间减少。而运行 pear install Archive_Zip 命令时,报告不能从下载频道找到 PEAR 包文件。于是去网上寻找,在 PEAR 站找到其 2005 年的 beta 0.1.1 测试版,文件是 Archive_Zip-0.1.1.tar。解压到 php.4.4.7\temp\download 下后,再运行 pear install Archive_Zip-0.1.1.tar 命令,就可以从本地安装该 PEAR 包了(注意好多文档只讲 pear install … 安装方法,这个只能在线安装类包)。安装以后,php.4.4.7\PEAR\Archive 下除了 Tar.php 文件,多了个 Zip.php 文件,正是我们需要的。

    再运行 list 命令看一下,确实安装上了:

    C:\usr\local\php.4.4.7>pear list
    INSTALLED PACKAGES, CHANNEL PEAR.PHP.NET:
    =========================================
    PACKAGE          VERSION STATE
    Archive_Tar      1.3.2   stable
    Archive_Zip      0.1.1   beta
    ……

    开始我们的测试:

    测试文件夹下原有文件及文件夹:
    ./to_zip/config.inc.php (文件)
    ./to_zip/readme.txt     (文件)
    ./to_zip/styles.css     (文件)
    ./to_zip/why100000.gif  (文件)
    ./create.php            (文件)
    ./unpackaged            (文件夹)
    ./unpackaged_all        (文件夹)

   (1)创建 zip 压缩文件示例代码:
    生成了包含4个文件的 zip 压缩包 new_zip.zip。生成的压缩包带 to_zip 路径,保持原目录结构。
    <?php
    include (’Archive/Zip.php’);

    $obj = new Archive_Zip(’new_zip.zip’);

    $files = array(  //生成的包带 to_zip 路径
    ‘to_zip/config.inc.php’,
    ‘to_zip/readme.txt’,
    ‘to_zip/styles.css’,
    ‘create.php’
    );

    if ($obj->create($files))
    {
      echo ‘Created successfully!’;
    }
    else
    {
      echo ‘Error in file creation’;
    }
    ?>

   (2)向压缩包里添加一个新文件:
    <?php
    include (’Archive/zip.php’);

    if (file_exists(’new_zip.zip’))
    {
      $obj = new Archive_zip(’new_zip.zip’);
    }
    else
    {
      die(’File does not exist.’);
    }

    $files = array( // additional files
    ‘to_zip/why100000.gif’
    );

    if ($obj->add($files))
    {
      echo ‘Added successfully!’;
    }
    else
    {
      echo ‘Error in file addition’;
    }
    ?>

   (3)列出压缩包里的文件信息:
    <?php
    include (’Archive/zip.php’);// import class

    $obj = new Archive_zip(’new_zip.zip’); // name of archive

    $files = $obj->listContent(); // array of file information

    foreach ($files as $f)
    {
      foreach ($f as $k => $v)
      {
        echo “$k: $v<br>”;
      }
      echo “<br>”;
    }
    ?>

   (4)删除压缩包里的文件:
    通过正则表达式匹配,可以删除全部或部分文件。

    <?php
    include (’Archive/Zip.php’);

    if (file_exists(’new_zip.zip’))
    {
      $obj = new Archive_Zip(’new_zip.zip’); // name of zip file
    }
    else
    {
      die(’File does not exist’);
    }

    $files = array(’to_zip/why100000.gif’);   // files to delete

    if ($obj->delete(array(’by_name’ => $files))) //’by_preg’ => “/.*doc$/” 删除 doc 文档
    {
      echo ‘Deleted successfully!’;
    }
    else
    {
      echo ‘Error in file deletion’;
    }
    ?>

   (5)从压缩包里解出文件:
    解开后带原文件路径结构,unpackaged 文件夹必须事先存在。

    <?php
    include (’Archive/zip.php’);

    if (file_exists(’new_zip.zip’))
    {
      $obj = new Archive_zip(’new_zip.zip’); // name of zip file
    }
    else
    {
      die(’File does not exist’);
    }
    $files = array(  //files to extract,解出文件 to_zip/why100000.gif
    ‘to_zip/why100000.gif’,
    );

    if ($obj->extract(array(’by_name’ => $files, ‘add_path’ => ‘unpackaged/’)))
    {
      echo ‘Extracted successfully!’;
    }
    else
    {
      echo ‘Error in file extraction’;
    }
    ?>

   (6)从压缩包里解出全部文件:
    和(5)其实是一回事,应用了正则表达式使全部文件被解包出来。(操作 Tar 文件,解除部分文件和全部文件,方法是不同的。)

    <?php
    include (’Archive/zip.php’);

    if (file_exists(’new_zip.zip’))
    {
      $obj = new Archive_zip(’new_zip.zip’); // name of zip file
    }
    else
    {
      die(’File does not exist’);
    }

    if ($obj->extract(array(’by_preg’ => ‘/.*/’, ‘add_path’ => ‘unpackaged_all/’))) //解开后带路径,unpackaged 必须事先存在
    {
      echo ‘Extracted successfully!’;
    }
    else
    {
      echo ‘Error in file extraction’;
    }
    ?>

    从 ZIP 压缩包里删除、解压文件,和 Tar 包的方法是不同的。网上有些教程全部照搬了 Tar 的方法来解释 ZIP 文件的操作(连文章的文字都是克隆过来的,几乎就是把“Tar”换成了“Zip”)。而由于这2种文件的解压的方法不同,所以 ZIP 的操作就没有解释解压的方法,在网上搜索,相关的文章就都没有 ZIP 解压缩的方法。看来没有几个人在潜心研究,照抄的人倒不少!

    后记:Zip.php 文件里包含了操作 zip 文件的类,包含了操作 zip 文件的算法,有兴趣的可以去研究。这可是最核心的东西,真正的精华其实是在这里。类似一些教程 - 包括您正在看的这篇,都是皮毛。













本文转自网眼51CTO博客,原文链接:http://blog.51cto.com/itwatch/286484,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
PHP操作XML文件学习笔记
原文:PHP操作XML文件学习笔记   XML文件属于标签语言,可以通过自定义标签存储数据,其主要作用也是作为存储数据。   对于XML的操作包括遍历,生成,修改,删除等其他类似的操作。PHP对于XML的操作方式很多,这次学习的是通过DOMDocument进行操作,其他的操作方法可以参考   http://www.oschina.net/code/snippet_110138_4727   1.对XML文件的遍历     通过DOMDocument对于XML文件的操作的方法:首先要实例化一个DOMDocument类的对象,然后引入要操作的XML文件。
812 0
zip 数据压缩
压缩与解压都是针对字节数组来进行的。 内存数据压缩 java.util.zip.DeflaterOutputStream 压缩步骤 1.创建一个ByteArrayOutputStream byteArrayOutputStream; 2.调用DeflaterOutputStream deflaterOutputStream=DeflaterOutputStrea
1024 0
javascript中对字符串的操作总结
原文:javascript中对字符串的操作总结 没听过一句话吗?程序员的世界,不处理字符串就是处理数组。这是群里的一位前辈和我说的,显然这和我之前理解的DOM是javascript的核心的不同的,看了几个面试题的内容,感觉前辈说的话非常的有道理,因此总结下,javascript中对字符串的操作。
803 0
kbmmw 中虚拟文件操作入门
kbmmw 中一直有一个功能,但是基本上都没有提过,但是在实际应用中,却非常有用,这个功能就是 虚拟文件包功能,他可以把一大堆文件保存到一个文件里面,方便后台管理。      kbmmw 的虚拟文件在单元kbmMWStreamStore 中实现,这个是非控件形式的,因此需要手工添加这个 单元。
1044 0
文件的压缩与解压XZip,XUnzip
参考http://www.codeproject.com/KB/cpp/xzipunzip.aspx CreateZip() –创建一个空的 zip 文件 HZIP CreateZip(void *z, unsigned int ...
1051 0
+关注
6906
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载