Разработка сайтов на UMI.CMS
Знать UMI.CMS в совершенстве невозможно.
Даже сами разработчики знают о ней не все...

UMi

Ursa Minor

Как разархивировать zip-архив php-скриптом

К сожалению, не все хостинги дают доступ по ssh. При его наличии жизнь становится простой и прекрасной: используя клиент winscp можно упаковывать-распаковывать tgz-архивы одним кликом мыши. Однако...

Есть два пути:

1. Путь простой, с использованием системных команд.
Закачиваем zip-архив, рядом с ним (в той же папке) помещаем php-скрипт следующего содержания

<?php
    echo exec('unzip file.zip');
?>

Естественно, можно все это хозяйство хранить в разных папках, просто тогда придется указывать путь к file.zip относительно запускаемого скрипта.

 

2. Путь сложный, но универсальный.

Используем библиотеку PclZip (сайт разработчиков). Русскоязычное описание PclZip

В одну папку с библиотекой помещаем архив archive.zip и  скрипт распаковки:

<?php

require_once('pclzip.lib.php');
$archive = new PclZip("archive.zip");
if ($archive->extract() == 0) {
die("Error : ".$archive->errorInfo(true));
}
?>

Файлы будут извлечены в ту же папку. Как изменить папку назначения описано по ссылке выше.

Для создания архива используем ту же библиотеку, передавая ей в список архивируемых файлов как строку: "file1.php,file2.php,file3.php" (без пробелов). Если файлов много, можно строить их список автоматически, использую скрипт:

<?php

require_once('pclzip.lib.php');//подключаем библиотеку

$files = glob('{,.ht}*', GLOB_BRACE);//получаем массив всех файлов в текущей папке, исключая .htaccess, .htpasswd

$s = array();
$aForbiddenNames = array('pclzip.lib.php','cgi-bin','zip.php','unzip.php');//указываем файлы, какие не следует включать в архив

//исключаем из массива файлов запрещенные
foreach($files as $file){
    if(in_array($file,$aForbiddenNames)) continue;
    $s[] = $file;
}
$s = implode(',', $s);//превращаем массив в строку

$archive = new PclZip('archive.zip');
$v_list = $archive->create($s);//создаем архив, передавая строку со списком файлов для архивации
if ($v_list == 0) {die("Error : ".$archive->errorInfo(true)); }
?>

Новости

30.10.2016

Обновлено описание макроса для вывода всех элементов справочника UMI.CMS с учетом версии 14.

 

21.07.2015

Памятка по обновлению до debian 8.1. Приятно вкусить все плюшки PHP 5.6

11.11.2014

Как выполнить SQL-запрос из bash-скрипта. Памятка

11.11.2014

Как отследить нагрузку сайта на сервер.

06.11.2014

Заготовка для галереи изображений с прокруткой. Не знаю, когда дойдут руки довести ее до вида плагина, поэтому открываю как есть. Можно доработать.

05.11.2014

Выкладываю как заготовку свой слайдер изображений на mootools

Все обновления