Я создаю 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; }
Нашел здесь смежный вопрос:
Работа с zip-файлом в PHP
Но как я могу заставить его получить имя «случайно» названной папки?
Разархивируйте файлы в каталог 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; }