7Авг2008
Категория: PHP
Автор: Rii
Привет!! Думаю у вас случалось, когда нужно было залить на сервер какой-нибудь движок или скрипт. Но он состоял из большого количества различных файлов и его загрузка занимала довольно много времени. Эх, как бы хотелось всё это сделать быстро и одним файлом. Вот и пришла мне идея написать небольшой скрипт для облегчения своей и вашей жизни.
В сети я нашёл очень удобную библиотеку для работы с 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 полями: для выбора загружаемого архива и для указания каталогу, куда всё это дело распаковать. Поле с каталогом не обязательное, и если его оставить пустым – архив распакуется в папку со скриптом. После распаковки скрипт выведет список распакованных папок и файлов.
Скачать скрипт распаковщика
Вот в принципе и всё! Конечно, скрипт очень простой, но то, что должен делать – он делает исправно. Жду ваших вопросов, отзывов и идей по поводу библиотеки и нашего скрипта.