zoukankan      html  css  js  c++  java
  • PHP执行zip与rar解压缩方法

    Zip:PclZip http://www.phpconcept.net/pclzip/index.en.php
    Rar:PECL rar http://pecl.php.net/package/rar
    以往過去要在php下執行解壓縮程序,無非最常見的方法是寫command 然後用exec()等執行函式去跑
    這在Windows下或許可以,但換成Unix話會礙於帳號權限問題而無法順利執行
    那有沒有那種本身就有提供函式可以直接使用而不需要去下command去跑的方法呢
    答案有(話說找了好幾天才找到可以用的方法......XD)
    先講Zip,由於php內建本身就有提供zip相關函式(但須先要有ziplib函式)但不是很好用
    就光extract來講,內建函式只負責單純解壓縮檔案出來,而不是會按照資料夾依序解壓縮出來
    這樣就失去extract的作用
    而要講的 PclZip 這支,本身就有提供 extension 了,故有沒有Ziplib就沒差
    且免安裝,只需要再用他時 include 進來就可以了
    例如:<?php include('pclzip.lib.php'); ?> 這樣
    此外在extract部分,則是會按照資料夾順序依序解壓縮出來,而並非單純解壓縮檔案出來
    相關用法像這樣

    <?php
    require_once('pclzip.lib.php');
    $archive = new PclZip('archive.zip');
    if ($archive->extract() == 0) { /*解壓縮路徑跟原始檔相同路徑*/
    die("Error : ".$archive->errorInfo(true));
    }
    ?>

    當然也可以指定解壓縮路徑,像這樣

    <?php
    include('pclzip.lib.php');
    $archive = new PclZip('archive.zip');
    if ($archive->extract(PCLZIP_OPT_PATH, 'data') { /*data換成其他路徑即可*/
    die("Error : ".$archive->errorInfo(true));
    }
    ?>

    如果再寫一支自動建立目錄的script會更好,因為函式本身不會判斷壓縮檔裡第一層是檔案還是資料夾(這我想其他相關函式也做不到吧!!!)
    再來是Rar,這問題比較大,由於php本身沒提供rar相關函式,所以需要求助第三方函式來用
    所幸有這個 PECL(The PHP Extension Community Library)
    裡面有個 rar 的 package 可以使用
    不過須得手動安裝才行
    若是 Unix 話,可以參考下列安裝法

    fetch http://pecl.php.net/get/rar-x.x.x.tgz
    gunzip rar-xxx.tgz
    tar -xvf rar-xxx.tar
    cd rar-xxx
    phpize
    ./configure && make && make install

    當然若是 freebsd 話,用 port 裝會更快

    cd /usr/ports/archivers/pecl-rar
    make
    make install

    記得安裝完後須 restart apache
    安裝完後可以做測試

    <?php
    $rar_file = rar_open('example.rar') or die("Failed to open Rar archive"); 
    /*example.rar換成其他檔案即可*/
    $entries_list = rar_list($rar_file);
    print_r($entries_list);
    ?>

    比較要注意的,若是用 port 安裝話,版本會比較新(官網只有到0.3.1,port 安裝話已經到0.3.4),所以用法上會有些出入
    但extract用法上並無差異
    相關用法像這樣

    <?php
    $rar_file = rar_open('example.rar') or die("Can't open Rar archive");
    /*example.rar換成其他檔案即可*/
    $entries = rar_list($rar_file);
    foreach ($entries as $entry) {
    $entry->extract('/dir/extract/to/'); /*/dir/extract/to/換成其他路徑即可*/
    }
    rar_close($rar_file);
    ?>

    跟Zip部分一樣,若搭配自動建立目錄會更好

    http://www.cnblogs.com/aha/archive/2010/12/02/1894825.html

  • 相关阅读:
    班别:批量添加导师
    批量删除注入字段,触发器防止注入。
    c#生成不重复随机数
    网络蜘蛛爬虫程序
    session丢失问题整理
    asp.net 自动生成控件
    C#实现所有经典排序算法 收藏
    泛型学习
    Android 判断网络并打开设置界面
    Android 获取Android手机中SD卡存储信息 获取剩余空间
  • 原文地址:https://www.cnblogs.com/guke/p/3003743.html
Copyright © 2011-2022 走看看