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

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

Laravel

那如何从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";}

更多相关文章

  1. php脚本的后缀名是什么
  2. PHP传递数组格式参数到shell脚本中
  3. php 创建目录的几种方法
  4. 命令行下可以跑PHP脚本,但是通过浏览器却不能跑?
  5. php利用mkdir()函数创建多级目录

随机推荐

  1. HTML中的XML数据岛记录编辑与添加代码实
  2. 利用XML开发留言板简单的实例代码解析
  3. xml入门:XML是什么,它可以做什么?
  4. 教你怎么样快速通过XSL转换XML文件
  5. 基于XML的购物车的实例代码详情
  6. linq to xml操作XML的方法
  7. 使用XMLHTTP发送超长XML表单数据的详情
  8. XML数据库中几个容易混淆的概念详细介绍
  9. 使用正则表达式进行xml数据验证的代码实
  10. 用XSL翻译Web服务应用程序