推奨: 「PHP ビデオ チュートリアル」
コードの更新を容易にするために、discuzQ をダウンロードし、指定された git リポジトリに抽出するスクリプトを作成します。
問題が発生しました。uniapp 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 パッケージ内の冗長なディレクトリ レベルを削除する方法を説明します。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。