【问题标题】:Unzip file skipping folder解压文件跳过文件夹
【发布时间】:2014-01-16 20:13:34
【问题描述】:

我正在创建一个 php 文件,该文件将在将其从 BitBucket (Git repo) 中拉出后更新我的网站。它下载整个主文件或提交的 zip 文件,然后将其解压缩到网站的文件夹中。

我遇到的问题是有一个随机命名的文件夹,其中包含 zip 文件中的所有文件。

我的 zip 文件内容类似:

master.php
    - (bitbucketusername)-(reponame)-(commitnumber)
        - folder1
            - index.php
            - test.php
        - index.php
        - config.php
        - etc...

但是我怎样才能“绕过”“随机”命名的文件夹并将文件夹的内容提取到网站的根目录?

echo "Unzipping update...<br>" . PHP_EOL;
$zip = new ZipArchive;
$res = $zip->open($filename);
if ($res === TRUE) {
    $zip->extractTo('/path/to/www');
    $zip->close();
} else {
    echo 'Error: The zip file could not be opened...<br>' . PHP_EOL;
}

在这里找到一个相关的问题:

Operating with zip file in PHP

但是我怎样才能让它获得“随机”命名的文件夹的名称?

【问题讨论】:

    标签: php bitbucket unzip


    【解决方案1】:

    将文件解压缩到 tmp 目录,然后将文件从“随机”命名的父文件夹中 mv 到您想要的文件夹中。

    echo "Unzipping update...<br>" . PHP_EOL;
    $zip = new ZipArchive;
    $res = $zip->open($filename);
    if ($res === TRUE) {
        $zip->extractTo('/tmp/unzip');
        $directories = scandir('/tmp/unzip');
        foreach($directories as $directory){
            if($directory!='.' and $directory!='..' ){
                if(is_dir($directory)){
                      // rcopy from http://ben.lobaugh.net/blog/864/php-5-recursively-move-or-copy-files
                      rcopy('/tmp/unzip/'.$directory,'/path/to/www');
                      // rm /tmp/unzip here
                }
        }
    } 
    
        $zip->close();
    } else {
        echo 'Error: The zip file could not be opened...<br>' . PHP_EOL;
    }
    

    【讨论】:

    • 他的rmove有很多错误,所以我把它改成了rcopy,并用我自己的代码删除了目录。不过答案很好。在这些编辑之后像魅力一样工作。谢谢! :) rcopy 实际上花费了大约三分之一的时间来完成!
    猜你喜欢
    • 2010-09-05
    • 2023-04-04
    • 2010-12-14
    • 1970-01-01
    • 2019-05-07
    • 2013-03-09
    • 2019-01-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多