91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

php zip解壓亂碼怎么辦

發布時間:2020-08-25 09:28:06 來源:億速云 閱讀:161 作者:小新 欄目:編程語言

小編給大家分享一下php zip解壓亂碼怎么辦,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

php zip解壓亂碼的解決辦法:首先將中文壓縮包名用iconv函數轉碼;然后通過ZipArchive的對象處理zip文件;最后關閉處理的zip文件即可。

php zip解壓亂碼怎么辦

測試環境是windows7

中文的zip壓縮包名和中文的文件名會導致PHP原生自帶的ZipArchive亂碼,導致extractTo方法失效:

<?php
$zip = new \ZipArchive;
$zipfile = "./test.zip";
$res = $zip->open($zipfile);
$toDir = "./test";
$s = $zip->extractTo($toDir);
print_r(scandir($toDir));
//作者:Dorm_Script
//鏈接:http://www.jianshu.com/p/3efa924fd809

參考一篇blog,原作的解決辦法是:

<?php
$zip = new \ZipArchive;
$zipfile = "./test.zip";
$res = $zip->open($zipfile);

$toDir = "./test";
if(!file_exists($toDir)) {
    mkdir($toDir);
}
$docnum = $zip->numFiles;
for($i = 0; $i < $docnum; $i++) {
    $statInfo = $zip->statIndex($i);
    if($statInfo['crc'] == 0) {
        //新建目錄
        mkdir($toDir.'/'.substr($statInfo['name'], 0,-1));
    } else {
        //拷貝文件
        copy('zip://'.$zipfile.'#'.$statInfo['name'], $toDir.'/'.$statInfo['name']);
    }
}

print_r(scandir($toDir));

//作者:Dorm_Script
//鏈接:http://www.jianshu.com/p/3efa924fd809

但是當$zipfile是中文編碼時,也就是壓縮包的名稱是中文時,解壓仍然會失敗。

此時單獨再將中文壓縮包名用iconv函數轉碼后再使用

        //zip文件名
        $fileName = '中文.zip';
        //zip文件相對服務器根目錄的保存路徑
        $uploads_dir = "/Public/zipUpload";

        //zip文件完整的保存路徑
        $zipName = $_SERVER['DOCUMENT_ROOT'].$uploads_dir.'/'.$fileName;
        //將目標路徑名稱賦值為fileName最后的'.zip'四個字符之外的全部字符構成的字符串
        $toDir = $_SERVER['DOCUMENT_ROOT'].$uploads_dir.'/'.substr($fileName,0,strlen($fileName)-4);

        $zip = new \ZipArchive;//新建一個ZipArchive的對象
        /*
        通過ZipArchive的對象處理zip文件
        $zip->open這個方法的參數表示處理的zip文件名。
        如果對zip文件對象操作成功,$zip->open這個方法會返回TRUE
        */
        $res = $zip->open(iconv ( 'UTF-8', 'GB2312', $zipName));
        if ($res === TRUE){
            if (!is_dir(iconv ( 'UTF-8', 'GB2312', $toDir))) {
                mkdir(iconv ( 'UTF-8', 'GB2312', $toDir), 0777, true);
            }
            //$zip->extractTo($toDir);
            $docnum = $zip->numFiles;
            for($i = 0; $i < $docnum; $i++) {
                $statInfo = $zip->statIndex($i);
                if($statInfo['crc'] == 0) {
                    //新建目錄
                    mkdir(iconv ( 'UTF-8', 'GB2312', $toDir.'/'.$statInfo['name']), 0777, true);
                } else {
                    //拷貝文件,特別的改動,iconv的位置決定copy能不能work
                    if(copy('zip://'.iconv ( 'UTF-8', 'GB2312', $zipName).'#'.$statInfo['name'], iconv ( 'UTF-8', 'GB2312', $toDir.'/'.$statInfo['name'])) == false){
                        echo 'faild to copy';
                    }
                }
            }

            print_r(scandir(iconv ( 'UTF-8', 'GB2312',$toDir)));
            $zip->close();//關閉處理的zip文件
        }
        else{
            echo 'failed, code:'.$res.'<br>';
        }

上述代碼的輸出:

Array
(
    [0] => .
    [1] => ..
    [2] => ??
    [3] => ?
)

壓縮包的目錄:

 中文.zip
├── 不
│   └── 要
│       └── dance.txt
└── 要
    └── dance1.txt

以上是php zip解壓亂碼怎么辦的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

静海县| 虞城县| 绥阳县| 卢龙县| 麻阳| 河北省| 托克托县| 横峰县| 仪陇县| 久治县| 黄冈市| 开平市| 淮滨县| 白沙| 石狮市| 博湖县| 勐海县| 中阳县| 四川省| 托克逊县| 顺昌县| 广元市| 龙陵县| 军事| 桐城市| 余江县| 依安县| 林甸县| 霍州市| 平山县| 巴青县| 宽城| 广汉市| 平原县| 闽侯县| 任丘市| 衡水市| 绵阳市| 安徽省| 延安市| 全椒县|