PHP ZipArchive 解壓Zip文件


PHP ZipArchive 是PHP自帶的擴展類,可以輕松實現ZIP文件的壓縮和解壓.

這里記錄一下自己在項目中用到它來解壓縮,然后讀取里面的文件。

$zip = new ZipArchive;//新建一個ZipArchive的對象
$pic_dir = '/'; // 文件所在的絕對路徑
if ($zip->open($zip_name) === TRUE)
{
    $file_arr = array();
    // 壓縮包里面有多個文件的情況
    for($i=0; $i<$zip->numFiles; $i++){
        // 解壓后的文件夾名稱
        $file_name = pathinfo($zip->getNameIndex($i))['basename'];
        // 文件全路徑
        $file_path = $pic_dir . pathinfo($zip->getNameIndex(0))['basename'];
        
        file_arr[] = $file_path;
        
        // 文件夾名稱不支持中文名稱
        if(preg_match('/[^\x00-\x80]/', $file_name)){
            continue;
        }
    }
    
    // 解壓縮到某個位置
    $zip->extractTo($pic_dir);
    
    // 關閉
    $zip->close();
}

// 解壓縮后就可以逐個讀取文件夾里面的文件
$files = scandir($file_arr[0])

 ===========================================================

 后續發現的問題 文件夾中的文件名稱如果包含某些中文或者字符, $zip->extractTo 會解壓失敗,報錯 file open failed...... 這些,就是打開不了文件。

太懶了,這里先簡單記錄一下自己的解決過程:

1,先對文件名   urlencode(base64_encode($filename))   ;然后重命名壓縮包里的文件 $zip->renameName($filename, $newfilename); ,這樣就可以對中文那些壓縮了

2,通過解壓后,記得把文件名稱還原回去,不然都是序列后的亂碼,自己也找不到文件名稱, base64_decode(urldecode($filename)) ;

 Tips: Windows環境下測試要轉成gbk, 因為默認windows默認gbk,  $filename = mb_convert_encoding($imgs[$filename], 'gbk', 'utf-8'); 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM