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

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

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

Laravel

那如何从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包里的多余目录层级的文章就分享到这,如果对你有帮助欢迎继续关注我们哦

本文来自投稿,不代表重蔚自留地立场,如若转载,请注明出处https://www.cwhello.com/41665.html

如有侵犯您的合法权益请发邮件951076433@qq.com联系删除

(0)
php学习php学习订阅用户
上一篇 2022年6月21日 22:42
下一篇 2022年6月21日 22:42

相关推荐

  • 在PHP中实现微信公众号素材库分类管理

    随着微信公众号的普及和使用,越来越多的企业和个人开始使用微信公众号来进行宣传和推广。微信公众号中的素材库是企业和个人进行宣传和推广的重要工具之一。然而,素材库中的素材种类繁多,管理起来比较困难。本文…

    2023年5月18日
    00
  • 关于如何使用Fedora 31和Nextcloud服务器构建自己的云。

    您可以使用 Fedora 31 和 Nextcloud 服务器构建自己的云。以下是一些步骤:,,1. 在安装和配置 Nextcloud 之前,必须满足一些预先条件。安装 Apache Web 服务器: dnf install httpd。接下来,安装 PHP 和一些其他…

    2024年7月13日
    00
  • PHP商城开发中如何构建社交功能

    社交分享在现代互联网应用程序中变得越来越重要。作为一名PHP商城开发者,您可能需要在您的应用程序中添加社交分享功能来增加用户的参与。这个功能可以允许用户在社交媒体平台上分享他们的购物体验,从而增加贵商城…

    2023年5月18日
    00
  • PHP入门指南:数据库优化。

    随着互联网的快速发展,数据库成为了许多企业应用系统的核心组件之一。而PHP作为流行的Web编程语言,对数据库的操作也是尤为频繁。数据库优化是提高应用系统性能的重要手段之一,本文将从PHP应用的角度出发,为大家…

    2023年5月22日
    01
  • PHP处理时间和时区需注意以下三点!

    当被问及是否很难处理日期和时区时,超过 50%的开发人员回答“是”。我的猜测是,那些对这项民意调查说“不”的人要么已经明白了这一点,要么他们没有与必须迎合全球用户的平台/应用程序合作。无论如何,我想创建一篇博…

    2022年6月21日
    0142
  • 探索PHP 生命周期

    学习 PHP 生命周期PHP的生命周期是一个很复杂的过程,其生命周期应该被热衷于使用它的人所掌握。主要内容如下:PHP 启动。如果运行的是 CLI 或者 FPM,它将运行 C main()。如果作为模块运行到网络服务器,像使用 apx…

    2022年6月12日 PHP自学教程
    0135
  • 使用PHP开发自定义WordPress插件。

    随着WordPress的发展,越来越多的用户需要自定义WordPress网站的功能。为了满足这种需求,开发自己的WordPress插件是一种不错的选择。在这篇文章中,我们将讨论如何使用PHP开发自定义WordPress插件。 首先,让我们…

    2023年5月30日
    04
  • 详解使用PHP开发直播功能的实用技巧。

    随着互联网的不断发展,直播功能也越来越受到人们的关注和青睐。在这样一个直播风潮的时代,需要一款稳定可靠的直播平台。而PHP作为一种强大的服务器端开发语言,可以用于创建高度交互性的应用程序,能够为直播平台…

    2023年5月23日
    01

联系我们

QQ:951076433

在线咨询:点击这里给我发消息邮件:951076433@qq.com工作时间:周一至周五,9:30-18:30,节假日休息