教你在PHP ZipArchive解压缩时,去掉zip包里的多余目录层级

教你在PHP ZipArchive解压缩时,去掉zip包里的多余目录层级,第1张

概述教你在PHP ZipArchive解压缩时,去掉zip包里的多余目录层级

推荐:《PHP视频教程》

写了个脚本,下载discuzQ,并解压到指定 git 仓储下,方便更新代码。

遇到一个问题,在解压 uniapp 这个zip包时,里面多了一层目录包装,如果直接解压到指定目录,也会造成多了一级目录,如下图:

那如何从zip包里解压,并去掉多余一层的目录 uniapp_v2.xxxx,可以看下面的 copy("zip://{$zipfile}#{$filename}", $newfilename);

<?PHPset_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 ZipArchive解压缩时,去掉zip包里的多余目录层级所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/998018.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-21
下一篇 2022-05-21

发表评论

登录后才能评论

评论列表(0条)

保存