Все ленты — последние статьи

Архивация документов

Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос:
на странице сайта идёт раздача документов в формате Ворд
эти файлы я вручную закидываю на хост, те кто по умнее хотели бы эти документы скачивать в заархированом виде, так вот, чтобы мне этим не парится мне можно архивацию возложить на сервер?
или это я загнул? если можно то как?
код напишите, спасибо

Консультирует Коцюрбенко Алексей aka Жерар (Советник):

Здравствуйте, Ципихович Эндрю!

 

Вот пример кода:
Код (HTML):

<html>
<head>
<title>Архивация файла</title>
</head>
<body>
<?php
if (isset($_FILES['file']) AND $_FILES['file']['error']==0)
{
$zip_archive = new ZipArchive();
$zip_file_name = substr_replace($_FILES['file']['name'], '.zip', strrpos($_FILES['file']['name'],'.'));
if ($zip_archive -> open(getcwd()."/$zip_file_name", ZIPARCHIVE::CREATE) == TRUE)
{
$zip_archive -> addFile($_FILES['file']['tmp_name'], $_FILES['file']['name']);
$zip_archive -> close();
echo "<a href='$zip_file_name'>Ссылка для загрузки архива</a>";
}
else echo "<div>Архив не может быть создан</div>";
}
else echo "
<form method=post enctype='multipart/form-data'>
<div>Выберите файл: <input type=file name='file'> <input type=submit value='Отправить'> </div>
</form>";
?>
</body>
</html>


Он загружает исходный файл на хостинг и сразу создаёт архив, используя класс ZipArchive. Сперва создаётся объект:
Код (PHP):

$zip_archive = new ZipArchive()

Потом открывается новый zip-архив:
Код (PHP):

$zip_archive ->
open(getcwd()."/$zip_file_name", ZIPARCHIVE::CREATE)


Первый параметр метода open — имя архива с полным путём (здесь оно получается из имени исходного файла заменой расширения на .zip и добавлением пути текущего каталога, Вы можете использовать для хранения архивов какой-то другой каталог и выбирать любое имя). Второй параметр — режим открытия (ZIPARCHIVE::CREATE означает создание нового архива). Возвращается TRUE, если архив успешно создан.

Затем к архиву добавляется файл (это можно повторить несколько раз):
Код (PHP):

$zip_archive -> addFile($_FILES['file']['tmp_name'], $_FILES['file']['name'])


Первый параметр метода addFile — имя добавляемого файла с полным путём (здесь это временный файл, созданный при загрузке через форму, Вы можете указать любое нужное имя), второй — имя файла внутри архива (если его не указывать, файл запишется в архив под своим именем вместе с полным путём). Возвращается TRUE, если файл успешно добавлен.

В конце закрывается созданный архив с сохранением всех добавлений:
Код (PHP):

$zip_archive -> close();