真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯網站制作重慶分公司

php壓縮中文亂碼問題如何解決

這篇“php壓縮中文亂碼問題如何解決”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“php壓縮中文亂碼問題如何解決”文章吧。

創(chuàng)新互聯公司,為您提供重慶網站建設公司、成都網站制作、網站營銷推廣、網站開發(fā)設計,對服務辦公窗簾等多個行業(yè)擁有豐富的網站建設及推廣經驗。創(chuàng)新互聯公司網站建設公司成立于2013年,提供專業(yè)網站制作報價服務,我們深知市場的競爭激烈,認真對待每位客戶,為客戶提供賞心悅目的作品。 與客戶共同發(fā)展進步,是我們永遠的責任!

php壓縮中文亂碼的解決方法:1、通過“composer require nelexa/zip”安裝PhpZip;2、打開“ZipFile.php”;3、找到“extractTo”方法,將“is_writable”函數改掉或去掉;4、轉換一下編碼格式即可。

解決php使用ZipArchive解壓時中文亂碼問題(純php,繞開ZipArchive)

解決php使用ZipArchive解壓時中文亂碼問題

使用php自帶的ZipArchive來解壓帶中文文件名壓縮包時會造成亂碼,現象如下:

php壓縮中文亂碼問題如何解決

網上查閱基本上給出的答案大同小異,自己照著同樣的方法試了都不能解決,下圖是網上給出的方案:

php壓縮中文亂碼問題如何解決

經過摸索終于找到了解決方案,那就是棄用ZipArchive,選擇其他的途徑,經過比較我選擇了“PhpZip”,優(yōu)點是:純php(不需要擴展和類),下面介紹安裝方法:

composer安裝:

composer require nelexa/zip

登錄后復制

如果選擇版本的話:composer require nelexa/zip:^3.0 (3.0版本號)

使用方法:

//解壓文件
$fileAddess = "壓縮包地址";
$toDir = "解壓目錄";
$zipFile = new \PhpZip\ZipFile();
$zipFile->openFile($fileAddess) // open archive from file
->extractTo($toDir); // extract files to the specified directory
$zipFile->close();

登錄后復制

注釋:(**如果安裝好使用正常請忽略下面的注釋內容**)

1.我的壓縮包放在共享盤里面連接的是smb地址,可能會出現報錯:"Destination is not writable directory",這個坑已經踩過:打開ZipFile.php這個文件,找到“extractTo”方法,將“is_writable”函數改掉,或者去掉,然后再轉換一下編碼格式!,下面有注釋的是我修改的內容!

/**
     * Extract the archive contents
     *
     * Extract the complete archive or the given files to the specified destination.
     *
     * @param string $destination Location where to extract the files.
     * @param array|string|null $entries The entries to extract. It accepts either
     *                                   a single entry name or an array of names.
     * @return ZipFile
     * @throws ZipException
     */
    public function extractTo($destination, $entries = null)
    {
        if (!file_exists($destination)) {
            throw new ZipException("Destination " . $destination . " not found");
        }
        if (!is_dir($destination)) {
            throw new ZipException("Destination is not directory");
        }
        $is_really_writable = $this->is_really_writable($destination);
        if (!$is_really_writable) {
            throw new ZipException("Destination is not writable directory");
        }
        /**
         * @var ZipEntry[] $zipEntries
         */
        if (!empty($entries)) {
            if (is_string($entries)) {
                $entries = (array)$entries;
            }
            if (is_array($entries)) {
                $entries = array_unique($entries);
                $flipEntries = array_flip($entries);
                $zipEntries = array_filter(
                    $this->centralDirectory->getEntries(),
                    function ($zipEntry) use ($flipEntries) {
                        /**
                         * @var ZipEntry $zipEntry
                         */
                        return isset($flipEntries[$zipEntry->getName()]);
                    }
                );
            }
        } else {
            $zipEntries = $this->centralDirectory->getEntries();
        }
        foreach ($zipEntries as $entry) {
            /******************************王天佑添加的邏輯start************************************/
            header("Content-type:text/html;charset=bgk");
            $entry_getName = iconv('GB2312', 'UTF-8//ignore',$entry->getName());
            //header("Content-type:text/html;charset=utf-8");
            /******************************王天佑添加的邏輯start************************************/
            $file = $destination . DIRECTORY_SEPARATOR . $entry_getName;
            if ($entry->isDirectory()) {
                if (!is_dir($file)) {
                    if (!mkdir($file, 0755, true)) {
                        throw new ZipException("Can not create dir " . $file);
                    }
                    chmod($file, 0755);
                    touch($file, $entry->getTime());
                }
                continue;
            }
            $dir = dirname($file);
            if (!is_dir($dir)) {
                if (!mkdir($dir, 0755, true)) {
                    throw new ZipException("Can not create dir " . $dir);
                }
                chmod($dir, 0755);
                touch($dir, $entry->getTime());
            }
            if (file_put_contents($file, $entry->getEntryContent()) === false) {
                throw new ZipException('Can not extract file ' . $entry_getName);
            }
            touch($file, $entry->getTime());
        }
        return $this;
    }
    //王天佑加的新邏輯,判斷目錄是否可寫
    public function is_really_writable($file){
        if (DIRECTORY_SEPARATOR == '/' AND @ini_get("safe_mode") == FALSE) {
            return is_writable($file);
        }
        if (is_dir($file)) {
            $file = rtrim($file, '/') . '/' . md5(mt_rand(1,100) . mt_rand(1,100));
            if (($fp = @fopen($file, "w+")) === FALSE) {
                return FALSE;
            }
            fclose($fp);
            @chmod($file, 0777);
            @unlink($file);
        } elseif (!is_file($file) OR ($fp = @fopen($file, "r+")) === FALSE) {
            fclose($fp);
            return FALSE;
        }
        return TRUE;
    }

以上就是關于“php壓縮中文亂碼問題如何解決”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注創(chuàng)新互聯行業(yè)資訊頻道。


網頁題目:php壓縮中文亂碼問題如何解決
文章URL:http://weahome.cn/article/poeohp.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部