栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > PHP

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

PHP 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

推荐:《PHP视频教程》

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

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


Laravel

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

 __DIR__ . '/zips',
    'uniapp'  => __DIR__ . '/uniapp',
];

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

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

    echo "正在下载: $zipUrln";
    $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包里的多余目录层级的详细内容,更多请关注考高分网其它相关文章!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/262646.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号