Привет!! Думаю у вас случалось, когда нужно было залить на сервер какой-нибудь движок или скрипт. Но он состоял из большого количества различных файлов и его загрузка занимала довольно много времени. Эх, как бы хотелось всё это сделать быстро и одним файлом. Вот и пришла мне идея написать небольшой скрипт для облегчения своей и вашей жизни.

В сети я нашёл очень удобную библиотеку для работы с zip-архивами. Знакомьтесь – PCLZip.

Теперь наш скрипт распаковщика:

<br />
<?php<br />
set_time_limit(0)// Установим максимальное время выполнения скрипта до бесконечности</p>
<p>$loadarch = $_FILES['arch']// Это для удобства</p>
<p>// Если ничего не загружено или произошла ошибка при загрузке - выводим форму<br />
if(empty($loadarch['name']) || $loadarch['error']!=UPLOAD_ERR_OK) {<br />
?></p>
<form action="" method="post" enctype="multipart/form-data">
  <b>Выберите zip-архив:</b></p>
<input type="file" name="arch">
  <b>Извлечь в папку:</b></p>
<input type="text" name="fold">
<input type="submit" value="Загрузить">
</form>
<p><?php<br />
exit// Вывели формочку и закончили<br />
}</p>
<p>// Если файл загружен, выполняем код ниже</p>
<p>// Проверим, является ли файл zip-архивом<br />
if($loadarch['type']!='application/zip' &#038;& $loadarch['type']!='application/x-zip-compressed')<br />
  die('Ошибка! Это не zip-архив!');</p>
<p>// Загружаем архив в папку со скриптом<br />
copy($loadarch['tmp_name'],$loadarch['name']);</p>
<p>// Подключаем библиотеку для работы с ZIP-архивами<br />
require_once('pclzip.lib.php');</p>
<p>// $loadarch['name'] - название архива<br />
$zip = new PclZip($loadarch['name']);</p>
<p>// Если указана папка для извлечения, распаковываем туда<br />
if(empty($_POST['fold']))<br />
  $ext = $zip->extract(PCLZIP_OPT_SET_CHMOD, 0777);<br />
// Иначе, в папку со скриптом<br />
else<br />
  $ext = $zip->extract(<br />
    PCLZIP_OPT_PATH,$_POST['fold'],<br />
    PCLZIP_OPT_SET_CHMOD, 0777<br />
);</p>
<p>// Если возвращает 0, выводим ошибку и выходим<br />
if($ext==0)<br />
  die("Ошибка! ".$zip->errorInfo(true));</p>
<p>// Выводим список загруженных файлов<br />
foreach ($ext as $val) {<br />
  echo $val['filename']."<br />";<br />
}<br />
echo "<b>Файлы успешно извлечены!!</b>";</p>
<p>// и удаляем уже распакованный архив<br />
unlink($loadarch['name']);<br />
?>

Итак, что в итоге получилось. Когда открываем страничку, мы видим перед собой простую форму с 2 полями: для выбора загружаемого архива и для указания каталогу, куда всё это дело распаковать. Поле с каталогом не обязательное, и если его оставить пустым – архив распакуется в папку со скриптом. После распаковки скрипт выведет список распакованных папок и файлов.

Скачать скрипт распаковщика

Вот в принципе и всё! Конечно, скрипт очень простой, но то, что должен делать – он делает исправно. Жду ваших вопросов, отзывов и идей по поводу библиотеки и нашего скрипта.