運用php實現zip壓縮和解壓縮功能

2015-12-25

php要實現壓縮功能,除了透過安裝perl外掛到server上之外,另一種簡單的方式就是透過include php的class,以下為下載連結

下載pclzip: http://www.phpconcept.net/pclzip/pclzip-downloads

下載後放置到您的php網站底下,然後透過include的方式把該class引用進php文件

include("pclzip.lib.php");

zip壓縮後下載到client端

$val = '要壓縮的文件名稱或資料夾名稱';
$zipDir_ignore = dirname(__FILE__)."/"; //忽略掉前面的資料夾結構
$zipDir = dirname(__FILE__)."/" .$val."/"; //建立來源資料夾結構
$filepath = dirname(__FILE__)."/" .$val."/"; //建立zip檔目的地
$filename = $val.".zip"; //建立zip檔檔名

//開始進行壓縮    
$archive = new PclZip($filepath.$filename);
$v_dir = $zipDir;
$v_remove = $zipDir_ignore; 
$v_list = $archive->create($v_dir, PCLZIP_OPT_REMOVE_PATH, $v_remove);
if ($v_list == 0) {
          //如果有錯誤終止程式
         die("Error : ".$archive->errorInfo(true));
}else{
       // 成功的話下載檔案到client端
        header("Pragma: public");
        header("Expires: 0");
        header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
        header("Cache-Control: public");
        header("Content-Description: File Transfer");
        header("Content-type: application/octet-stream");
        header("Content-Disposition: attachment; filename="".$filename.""");
        header("Content-Transfer-Encoding: binary");
        header("Content-Length: ".filesize($filepath.$filename));
        ob_end_flush();
        readfile($filepath.$filename);
        unlink($filepath.$filename); //下載完成後刪掉主機上的壓縮檔
}

zip上傳後解壓縮

表單

<form id="myform" method="post" action="接收程式.php" enctype = "multipart/form-data">
    <input type="file" name="uploadTpl" />
    <input id="uploadTmpBtn" type="button" value="上傳壓縮檔" />
</form>

接收程式 

if (isset($_FILES['uploadTpl'])) {
    $uploadDir = dirname(__FILE__)."/"; //上傳目標資料夾
    
    if ($_FILES['uploadTpl']['size']> 0){
          $filename = $_FILES["uploadTpl"]["name"];
        if(strrchr($_FILES['uploadTpl']['name'],".") == ".zip") {
            copy($_FILES["uploadTpl"]["tmp_name"], $uploadDir.$_FILES['uploadTpl']['name']);

            //上船後解壓縮到目前的路徑下
            $archive = new PclZip($uploadDir.$_FILES['uploadTpl']['name']);
            $v_list = $archive->extract(PCLZIP_OPT_PATH, $uploadDir); /*換成其他路徑即可*/
            
            //解壓完後把zip檔刪掉
            unlink($uploadDir.$_FILES['uploadTpl']['name']);
            
            if ($v_list == 0) {
                //如果有錯誤終止程式
                die("Error : ".$archive->errorInfo(true));
            }else{
                $optionvalue = str_replace(".zip","",$_FILES['uploadTpl']['name']);
                echo '0||<option value="'.$optionvalue.'" selected>'.$optionvalue.'</option>';
            }

        }else{
            echo '只允許zip檔案格式!';    
        }
      }

}else{
    echo "無任何資料上傳!";    
}

另外,如果要透過jquery的ajax來進行post動作,ajax要有一些設定

<script>
  $(function(){
    $("#uploadTmpBtn").on("click",function(){
        var fdata = new FormData(document.getElementById("myform"));
        $.ajax({
            type: 'POST',
            url: '接收程式.php',             
            cache: false,
            enctype: 'multipart/form-data',
            processData: false,  // tell jQuery not to process the data
            contentType: false,   // tell jQuery not to set contentType
            data: fdata
        }).done(function( data ) {
             //成功後的動作
             console.log(data );
        }).fail(function( textStatus ) {
            //失敗後的動作
            console.log(textStatus);
        });
    })
  })
</script>
 

Contact

Github

Codepen

歡迎參觀我的賣場
© 2013 Copyright Digishot Web | Design Tools
Visitors【633026】
digishot webdesign studio