php - 解压文件跳过文件夹

标签 php bitbucket unzip

我正在创建一个 php 文件,该文件将从 BitBucket(Git 存储库)中拉出后更新我的网站。它下载整个主文件或提交的 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

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

最佳答案

将文件解压缩到 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;
}

关于php - 解压文件跳过文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21171906/

相关文章:

git - 公共(public)存储库 bitbucket 上的私有(private)分支

ruby-on-rails - 如何使用 ruby​​zip 库获取压缩文件的内容?

PHP 替换特殊字符,如 à->a、è->e

php - 在同一个查询中多次从同一个表中选择

php - 为什么要使用 stdClass 而不是我们自定义的对象名称?

php - Facebook 长期访问 token 过期 :Never

bitbucket - 如何从 Bitbucket "push"webhook 运行 shell 脚本?

Mercurial 分支困惑

java - Storm 流: Cannot run program "unzip" (in directory ".")

python - 你如何在python中解压缩非常大的文件?