解压缩文件跳过文件夹

时间:2014-01-16 20:13:35

标签: php bitbucket unzip

我正在创建一个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

但是如何让它获得“随机”命名文件夹的名称?

1 个答案:

答案 0 :(得分:2)

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

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;
}