ホームページ  >  記事  >  バックエンド開発  >  PHP ZipArchive を解凍するときに、zip パッケージ内の冗長なディレクトリ レベルを削除する方法を説明します。

PHP ZipArchive を解凍するときに、zip パッケージ内の冗長なディレクトリ レベルを削除する方法を説明します。

藏色散人
藏色散人転載
2020-11-01 15:34:566549ブラウズ

推奨: 「PHP ビデオ チュートリアル

コードの更新を容易にするために、discuzQ をダウンロードし、指定された git リポジトリに抽出するスクリプトを作成します。

問題が発生しました。uniapp zip パッケージを解凍すると、ディレクトリ パッケージングの追加のレイヤーが存在します。指定したディレクトリに直接解凍すると、以下に示すように、ディレクトリのレベルも追加されます。 :

PHP ZipArchive を解凍するときに、zip パッケージ内の冗長なディレクトリ レベルを削除する方法を説明します。

zip パッケージを解凍し、ディレクトリ uniapp_v2.xxxx の余分な層を削除する方法については、次の copy( "zip:// {$zipFile}#{$filename}", $newFileName);

<?php

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

downloadAndExtract(&#39;https://dl.discuz.chat/uniapp_latest.zip&#39;, &#39;uniapp&#39;);

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

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

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

    if ($key === &#39;uniapp&#39;) {
        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) === &#39;/&#39;) {
                    continue;
                }

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

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

以上がPHP ZipArchive を解凍するときに、zip パッケージ内の冗長なディレクトリ レベルを削除する方法を説明します。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はlearnku.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。