Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Как узнать размер сжатых файлов в архиве zip?

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Ferro7
Отправлено: 16 Июля, 2010 - 19:22:42
Post Id


Новичок


Покинул форум
Сообщений всего: 14
Дата рег-ции: Июль 2010  


Помог: 0 раз(а)




Использую класс PHP ZipArchive для работы с архивами zip, которые пользователи могут загружать мне на сервер. По ходу разработок задумался над проблемами архивных бомб, т.е. таких архивов, которые могут содержать несколько гигабайт файлов при размере архива всего в несколько килобайт.
Так вот, как, используя в проекте PHP, узнать размер сжатых файлов в архиве zip?
В доках PHP к ZipArchive абсолютно ничего нет про размер файлов в архиве. Может, можно как-то через функции pack/unpack, как в одном примере по получению информации из файла mp3?
 
 Top
DeepVarvar Супермодератор
Отправлено: 16 Июля, 2010 - 20:58:22
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




Встречный вопрос: А действительно ли так необходимо распаковывать полученные файлы?

Как альтернатива (с условием что вы под *NIX-ами) - можно вызвать без-GUI-ный архиватор, там есть флаги которые могут вернуть как список запакованых файлов так и их размер после распаковки
 
 Top
Мелкий Супермодератор
Отправлено: 16 Июля, 2010 - 21:08:34
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Погуглите спецификацию zip-архивов, а именно - заголовков. Вроде бы там есть заголовок "uncompressed size"


-----
PostgreSQL DBA
 
 Top
Ferro7
Отправлено: 16 Июля, 2010 - 21:24:12
Post Id


Новичок


Покинул форум
Сообщений всего: 14
Дата рег-ции: Июль 2010  


Помог: 0 раз(а)




DeepVarvar пишет:
Встречный вопрос: А действительно ли так необходимо распаковывать полученные файлы?

Да, пользователи загружают мне на сервер специальные файлы в архиве, их надо обработать. Без распаковывания не обойтись

А насчёт заголовков архивов - спс, как раз за минуту до вашего ответа на php.net в комментариях нашёл пользовательскую функцию, она по ходу читает и заголовки.

Вообще, странно, что при такой лёгкости создания архивных бомб и возможности работы с архивами в php гугл ничего толкового не выдаёт...
 
 Top
DeepVarvar Супермодератор
Отправлено: 16 Июля, 2010 - 21:27:17
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




Ferro7 вы с нами поделитесь решением? Подмигивание
(Добавление)
А вдрух кому пригодиццццо....
 
 Top
Champion Супермодератор
Отправлено: 17 Июля, 2010 - 08:56:39
Post Id



Активный участник


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


Помог: 57 раз(а)




Ferro7 пишет:
В доках PHP к ZipArchive абсолютно ничего нет про размер файлов в архиве.

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.  
  3. $zip = zip_open("/tmp/test2.zip");
  4.  
  5. if ($zip) {
  6.     while ($zip_entry = zip_read($zip)) {
  7.         echo "Name:               " . zip_entry_name($zip_entry) . "\n";
  8.         echo "Actual Filesize:    " . zip_entry_filesize($zip_entry) . "\n";
  9.         echo "Compressed Size:    " . zip_entry_compressedsize($zip_entry) . "\n";
  10.         echo "Compression Method: " . zip_entry_compressionmethod($zip_entry) . "\n";
  11.  
zip_entry_filesize($zip_entry) Угадай, откуда код?
(Добавление)
А в классе есть функции statName(имя) и statIndex(индек), которые вернут массив с информацией об указанном файле. В том числе размер
Array
(
[name] => foobar/baz
[index] => 3
[crc] => 499465816
[size] => 27
[mtime] => 1123164748
[comp_size] => 24
[comp_method] => 8
)
 
 Top
Ferro7
Отправлено: 17 Июля, 2010 - 11:07:49
Post Id


Новичок


Покинул форум
Сообщений всего: 14
Дата рег-ции: Июль 2010  


Помог: 0 раз(а)




> А в классе есть функции statName(имя) и statIndex(индек), которые вернут массив с информацией об указанном файле. В том числе размер

В жизни бы не догадался Радость
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB