EOMY.NET
Хостинг EOMY.NET: Форум поддержки
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
RSS Feed  

ZIP архивация PHP
На страницу 1, 2  След.
 
Начать новую тему   Ответить на тему    Список форумов EOMY.NET -> Программирование для WEB
ZIP архивация PHP
Автор Сообщение
jekob
$UIN = 22102006335
11 1110 1000


Зарегистрирован: 22.10.2006
Сообщения: 1155
Откуда: Zirkan.com
27078 Монеты

СообщениеДобавлено: Вт, 16 Сен, 2008 18:02    Заголовок сообщения: ZIP архивация PHP Ответить с цитатой

вобщем клиент заходит на сайт, загружает информацию(изображения, видео, текст) в форму, часть информации идет в базу, часть сохраняется в уникальную папку(лимит загрузки - 100МБ на клиента). Затем входит админ, смотрит инфу и у него должна быть возможность СЛИТЬ все файлы, которые прислал клиент ОДНИМ архивом, из админки.
Я знаю что эта функция должна быть в PHP(например славноизвестная CPanel ее использует регулярно), но ума не приложу как это реализовать?

Ктонибудь с этим работал, знает?
Заранее спасибо!
_________________

Fear is the Mind Killer.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора AIM Address MSN Messenger
Веденин
Красные глаза
Красные глаза


Зарегистрирован: 17.05.2007
Сообщения: 2066
Откуда: Самара
11733 Монеты

СообщениеДобавлено: Вт, 16 Сен, 2008 18:14    Заголовок сообщения: Ответить с цитатой

1) Например, здесь описывается скрипт который делает именно это архивирует все файлы директории.
http://fdstar.net/2008/03/27/PHP_kak_zapakovat_soderjimoe_papki_v_ZIP_arhiv_na_servere.html
2) Вот интересная статья на эту тему с http://www.simplecoding.org/sozdanie-zip-arxivov-na-php.html

Цитата:
Думаю, никому не нужно объяснять, насколько широко сегодня используются zip архивы. Поддержка этого формата реализована во всех современных операционных системах, а библиотеки для работы с ним, написаны для большинства языков программирования.
В этой статье я покажу, как написать небольшой PHP скрипт, создающий zip архив.

Прежде всего, убедитесь, что включена поддержка всех нужных функций. Для этого в файле php.ini нужно убрать символ комментария (Wink в начале строки:
extension=php_zip.dll

Теперь переходим к созданию архива.
Все операции с архивом выполняются с помощью объекта ZipArchive, создать его не сложно:

$zip = new ZipArchive();
После этого нужно создать файл архива с помощью метода open(), который в качестве параметров принимает имя архива и константу, указывающую способ открытия (об этом чуть позже).

Если на этом этапе ошибок не произошло, то с помощью метода addFile() можно добавить в архив файлы. Метод принимает два параметра:
первый – имя исходного файла;
второй – имя под которым файл будет добавлен в архив (если этот параметр не указан, будет использовано имя из первого параметра).

Примечание. Тут есть один нюанс. Если имя исходного файла “d:/docs/myfile.txt” и вы не укажите второй параметр, то в архиве будет создана папка “d”, а в ней – “docs”. Файл “myfile.txt” будет размещен в “docs”. Чтобы избежать создания папок в архиве просто укажите во втором параметре “myfile.txt”, и тогда файл будет размещен в корне архива.

Завершает работу с архивом метод close().

Так, с теорией закончили. Теперь посмотрим, как все это работает на примере.

Напишем небольшой скрипт, который будет создавать архив со всеми файлами из какой-нибудь папки.

Код:
<?php
//папка в которой будет размещен архив
$archive_dir = "E:/archiveFolder/";
//папка с исходными файлами
$src_dir = "E:/srcFolder/";
 
//создание zip архива
$zip = new ZipArchive();
//имя файла архива
$fileName = $archive_dir."backup_".date('j_m_Y_h_m_s').".zip";
if ($zip->open($fileName, ZIPARCHIVE::CREATE) !== true) {
    fwrite(STDERR, "Error while creating archive file");
    exit(1);
}
 
//добавляем файлы в архив все файлы из папки src_dir
$dirHandle = opendir($src_dir);
while (false !== ($file = readdir($dirHandle))) {
    $zip->addFile($src_dir.$file, $file);
}
//закрываем архив
$zip->close();
 
fwrite(STDOUT, "Archive created\n");
 
exit(0);
?>
Переменная $src_dir содержит путь к папке с исходными файлами, а $archive_dir – путь к папке в которой будет создан архив.

Примечание: учтите, что наш скрипт эти папки не создает, поэтому сделайте это самостоятельно.

В переменной $fileName содержится имя архива. К имени я добавил дату и время создания архива в формате “день_месяц_год_часы_минуты_секунды”. Это позволяет многократно запускать скрипт и не думать о том, что новая версия архива запишется поверх старой.

В строках 11-14 мы открываем архив, при этом используется константа ZIPARCHIVE::CREATE, которая указывает, что если архива не существует, то он должен быть создан. Если во время создание архива возникли ошибки, выводим сообщение и завершаем работу.

После этого, мы открываем папку с исходными файлами и добавляем их в архив (строки 17-20).
Метод close() (в строке 22) закрывает архив.

Запускаем скрипт:
php путь_к_скрипту\имя_скрипта.php

Если ошибок не было, в папке "E:/archiveFolder/" вы будет создан архив.

Как видите, ничего сложного. В следующий раз я покажу как извлечь файлы из архива.

_________________
Написание конвекторов, парсеров, интеграции нескольких сайтов (в личку)

Тематические поисковые системы Рунета: Танцевальная, программиста, поиск книг
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
lazutov
while (1==1);
Последний герой


Зарегистрирован: 30.04.2007
Сообщения: 3840

111220 Монеты

СообщениеДобавлено: Вт, 16 Сен, 2008 18:14    Заголовок сообщения: Ответить с цитатой

http://ru2.php.net/manual/ru/zip.examples.php
банально
_________________
сервис DNS | разные http, DNS и прочие утилиты
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
jekob
$UIN = 22102006335
11 1110 1000


Зарегистрирован: 22.10.2006
Сообщения: 1155
Откуда: Zirkan.com
27078 Монеты

СообщениеДобавлено: Вт, 16 Сен, 2008 18:47    Заголовок сообщения: Ответить с цитатой

Огромное Cпасибо за оперативную помощь!
_________________

Fear is the Mind Killer.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора AIM Address MSN Messenger
[LP]LordPro.teus
Призрак Лорда
Призрак Лорда


Зарегистрирован: 26.07.2007
Сообщения: 5092

42282 Монеты

СообщениеДобавлено: Вт, 16 Сен, 2008 19:09    Заголовок сообщения: Ответить с цитатой

lazutov
только класс не идет как базовый для PHP Smile а это уже усложнение(
_________________

До выхода LiteDiary 0.3.0: парам-пам-пам-пам! Она уже здесь!
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
girafenok
Два пингвиненка
Два пингвина


Зарегистрирован: 17.11.2007
Сообщения: 333

11827 Монеты

СообщениеДобавлено: Вт, 16 Сен, 2008 19:51    Заголовок сообщения: Ответить с цитатой

PHP здесь не поможет, особенно если в папке надо будет создать архив 100МБ, время выполнения php скрипта в режиме mod_php никто не отменял. Этим кстати грешит и Cpanel, ниразу не удавалось создать архив домашней директории, все время обрывалось на полпути.
PERL Вам в помощь и его расширение Archive-Zip
http://search.cpan.org/~adamk/Archive-Zip/lib/Archive/Zip.pm
P.S. На данном хостинге установлено (/me c опаской посмотрел в сторону Дмитрия Very Happy).
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Веденин
Красные глаза
Красные глаза


Зарегистрирован: 17.05.2007
Сообщения: 2066
Откуда: Самара
11733 Монеты

СообщениеДобавлено: Ср, 17 Сен, 2008 04:30    Заголовок сообщения: Ответить с цитатой

Цитата:
PHP здесь не поможет, особенно если в папке надо будет создать архив 100МБ, время выполнения php скрипта в режиме mod_php никто не отменял.

Отменял set_time_limit Laughing
Подробнее смотрите тему на этом форуме http://www.eomy.net/forum/kak-sdelat-dolgoigrayuschii-skript-na-php-vt2814.html

P.S. Разве здесь был разговор КАК работает php? По моему скромному мнению jekob вполне себе может позволить выделенный сервер или хотя бы виртуальный выделенный сервер и задать свои настройки на работу php, не говоря уж о запуске php скриптов из командной строки. Very Happy
ИМХО, если есть задачи постоянно архивировать по 100МБ, то для этого вполне можно виртуальный выделенный сервер арендовать, либо делать не один архив, а несколько.
_________________
Написание конвекторов, парсеров, интеграции нескольких сайтов (в личку)

Тематические поисковые системы Рунета: Танцевальная, программиста, поиск книг
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Александр Михалицын
Согнул ложку
Согнул ложку


Зарегистрирован: 22.08.2008
Сообщения: 860

18841 Монеты

СообщениеДобавлено: Ср, 17 Сен, 2008 07:43    Заголовок сообщения: Ответить с цитатой

ОО, интересная инфа, я что-то даже и не знал о создании зип архивов средствами пхп.. Rolling Eyes
Спасибо топикстартеру и отвечающим.
_________________
Пригласительные коды
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
girafenok
Два пингвиненка
Два пингвина


Зарегистрирован: 17.11.2007
Сообщения: 333

11827 Монеты

СообщениеДобавлено: Ср, 17 Сен, 2008 10:17    Заголовок сообщения: Ответить с цитатой

Веденин писал(а):

Разве здесь был разговор КАК работает php? По моему скромному мнению jekob вполне себе может позволить выделенный сервер или хотя бы виртуальный выделенный сервер и задать свои настройки на работу php, не говоря уж о запуске php скриптов из командной строки. Very Happy

Ни на секунду не усомнился, что jekob может позволить себе выделенный сервер Very Happy. Исходил из того, что скрипт выполняется на шаред-хостинге. Если же запускать php в CGI режиме, то разницы между использованием скриптов на PHP и PERL нет.
Веденин писал(а):

ИМХО, если есть задачи постоянно архивировать по 100МБ, то для этого вполне можно виртуальный выделенный сервер арендовать, либо делать не один архив, а несколько.

Согласен, что VPS или выделенный сервер для таких задач предпочтительней, но и с VPS на практике не все так радужно, как кажется.
Веденин писал(а):

Отменял set_time_limit Laughing
Подробнее смотрите тему на этом форуме http://www.eomy.net/forum/kak-sdelat-dolgoigrayuschii-skript-na-php-vt2814.html

set_time_limit тоже не панацея, как я понял, он не работает в safe_mod режиме. К тому же с точки зрения использования ресурсов сервера, долгоиграющий скрипт в режиме mod_php - не лучший вариант.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Веденин
Красные глаза
Красные глаза


Зарегистрирован: 17.05.2007
Сообщения: 2066
Откуда: Самара
11733 Монеты

СообщениеДобавлено: Ср, 17 Сен, 2008 11:51    Заголовок сообщения: Ответить с цитатой

safe_mod режим даже на бесплатных хостингах редкость, на платных ... просто не берите такой хостинг

Достаточно легко сделать скрипт на JavaScript, который пошлет хоть сто запросов PHP с указанным интервалом, а в PHP просто в созданный архив будет добавлять немного новых файлов. ИМХО ситуация когда надо архивировать один 100 Мб файл редкость Very Happy

P.S. Не уверен, что постоянная работа 30 минутного скрипта на Perl не будет "есть" ресурсы.
_________________
Написание конвекторов, парсеров, интеграции нескольких сайтов (в личку)

Тематические поисковые системы Рунета: Танцевальная, программиста, поиск книг
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
lazutov
while (1==1);
Последний герой


Зарегистрирован: 30.04.2007
Сообщения: 3840

111220 Монеты

СообщениеДобавлено: Ср, 17 Сен, 2008 12:59    Заголовок сообщения: Ответить с цитатой

Веденин
у меня на одном платном хостинге(любимом кстати по качству) есть safe_mod
и хорошо живу
_________________
сервис DNS | разные http, DNS и прочие утилиты
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Веденин
Красные глаза
Красные глаза


Зарегистрирован: 17.05.2007
Сообщения: 2066
Откуда: Самара
11733 Монеты

СообщениеДобавлено: Ср, 17 Сен, 2008 13:07    Заголовок сообщения: Ответить с цитатой

Да нет я просто говорил, если вам safe_mode жить мешает, так не стоит брать такой хостинг, платных хостингов хватает
_________________
Написание конвекторов, парсеров, интеграции нескольких сайтов (в личку)

Тематические поисковые системы Рунета: Танцевальная, программиста, поиск книг
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Михаил Сорокин
Интернет на завтрак
Интернет на завтрак


Зарегистрирован: 15.09.2008
Сообщения: 28
Откуда: Самара
815 Монеты

СообщениеДобавлено: Ср, 17 Сен, 2008 13:20    Заголовок сообщения: Ответить с цитатой

Код:
system("gzip /path/to/file/or/dir");


можно использовать что-то на подобии, т.е. средствами сервера запокавать
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
[LP]LordPro.teus
Призрак Лорда
Призрак Лорда


Зарегистрирован: 26.07.2007
Сообщения: 5092

42282 Монеты

СообщениеДобавлено: Ср, 17 Сен, 2008 13:40    Заголовок сообщения: Ответить с цитатой

Михаил Сорокин
речь о ZIP, не GZ...
_________________

До выхода LiteDiary 0.3.0: парам-пам-пам-пам! Она уже здесь!
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Михаил Сорокин
Интернет на завтрак
Интернет на завтрак


Зарегистрирован: 15.09.2008
Сообщения: 28
Откуда: Самара
815 Монеты

СообщениеДобавлено: Ср, 17 Сен, 2008 13:44    Заголовок сообщения: Ответить с цитатой

[LP]LordPro.teus писал(а):
Михаил Сорокин
речь о ZIP, не GZ...

я думаю для решения данной задачи разници нет
_________________
Все могут попасть в рай, самое главное во время подчистить логи (с) r57
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов EOMY.NET -> Программирование для WEB Часовой пояс: GMT
На страницу 1, 2  След.
Страница 1 из 2

 


EOMY TOP 100 Rambler's Top100   Рейтинг@Mail.ru    



Powered by phpBB © 2001, 2005 phpBB Group


Рейтинг SIMPLETOP.NET