溫馨提示×

溫馨提示×

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

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

PHP ZipArchive解壓縮時如何去掉zip包里的多余目錄層級

發(fā)布時間:2020-11-02 11:13:34 來源:億速云 閱讀:440 作者:小新 欄目:編程語言

這篇文章主要介紹PHP ZipArchive解壓縮時如何去掉zip包里的多余目錄層級,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!

                                                       

寫了個腳本,下載discuzQ,并解壓到指定 git 倉儲下,方便更新代碼。

遇到一個問題,在解壓 uniapp 這個zip包時,里面多了一層目錄包裝,如果直接解壓到指定目錄,也會造成多了一級目錄,如下圖:

PHP ZipArchive解壓縮時如何去掉zip包里的多余目錄層級

那如何從zip包里解壓,并去掉多余一層的目錄 uniapp_v2.xxxx,可以看下面的 copy("zip://{$zipFile}#{$filename}", $newFileName);

<?php

set_time_limit(0);
$config = (object)[
    'zips'    => __DIR__ . '/zips',
    'uniapp'  => __DIR__ . '/uniapp',
];

downloadAndExtract('https://dl.discuz.chat/uniapp_latest.zip', 'uniapp');

function downloadAndExtract($zipUrl, $key)
{
    global $config;

    echo "正在下載: $zipUrl\n";
    $zipData = file_get_contents($zipUrl);
    $zipFile = $config->zips . "/$key-" . date('Ymd-His') . '.zip';
    file_put_contents($zipFile, $zipData);

    echo "正在解壓到 {$config->$key} \n";
    $zip = new ZipArchive;

    if ($key === 'uniapp') {
        if ($zip->open($zipFile) === true) {
            $folder = $zip->getNameIndex(0);
            for ($i = 1; $i < $zip->numFiles; $i++) {
                $filename = $zip->getNameIndex($i);
                if (substr($filename, -1, 1) === '/') {
                    continue;
                }

                // $folder like => uniapp_v2.1.201029/
                // $filename like => uniapp_v2.1.201029/commitlint.config.js
                $newFileName = $config->$key . '/' . str_replace($folder, '', $filename);
                if (!file_exists(dirname($newFileName))) {
                    mkdir(dirname($newFileName), 0644, true);
                }
                copy("zip://{$zipFile}#{$filename}", $newFileName);
            }
            $zip->close();
        }
    } 

    echo "-------------- SUCESS --------------\n";
}

以上是PHP ZipArchive解壓縮時如何去掉zip包里的多余目錄層級的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI