[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Как узнать размер сжатых файлов?
Ferro7
Использую класс PHP ZipArchive для работы с архивами zip, которые пользователи могут загружать мне на сервер. По ходу разработок задумался над проблемами архивных бомб, т.е. таких архивов, которые могут содержать несколько гигабайт файлов при размере архива всего в несколько килобайт.
Так вот, как, используя в проекте PHP, узнать размер сжатых файлов в архиве zip?
В доках PHP к ZipArchive абсолютно ничего нет про размер файлов в архиве. Может, можно как-то через функции pack/unpack, как в одном примере по получению информации из файла mp3?



Спустя 2 часа, 55 минут, 23 секунды (16.07.2010 - 22:04) Reflex написал(а):
<?php

function
get_zip_originalsize($filename) {
$size = 0;

$resource = zip_open($filename);
if (!is_resource($resource)) return -1;

while ($dir_resource = zip_read($resource)) {
$size += zip_entry_filesize($dir_resource);
}

zip_close($resource);

return $size;
}

$size = get_zip_originalsize('file.zip');
echo "original size: $size bytes\n";

Написал за пару минут сверяясь с мануалом.

Спустя 1 день, 13 часов, 15 минут, 39 секунд (18.07.2010 - 11:20) Ferro7 написал(а):
Не, если бы вы делали, сверяясь с мануалов, вы бы написали:

while( ($dir_resource = zip_read($resource) !== false )


но не

while($dir_resource = zip_read($resource))


А так да, спасибо за примерчек. Я просто использовал КЛАСС ZipArchive, и смотрел доки к именно к КЛАССУ, но не к функциям zip_open

Спустя 32 минуты, 36 секунд (18.07.2010 - 11:52) Reflex написал(а):
Цитата ("Ferro7")
Не, если бы вы делали, сверяясь с мануалов, вы бы написали:
<pre class="sh_sourceCode" rel="php"><span class="sh_control">while</span><span class="sh_symbol">( (</span><span class="sh_variable">$dir_resource</span> <span class="sh_symbol">=</span> <span class="sh_function">zip_read</span><span class="sh_symbol">(</span><span class="sh_variable">$resource</span><span class="sh_symbol">) !==</span> <span class="sh_keyword">false</span> <span class="sh_symbol">)</span></pre>

Нет, спасибо, я не считаю хорошим тоном делать такие проверки для функций, которые возвращают переменную типа resourse или FALSE.

В мануале написано неверно, функция zip_read возвращает или resourse или FALSE, никаких других вариантов нет. Да даже если бы и был, ваш вариант не помог бы.

А вот функция zip_open действительно может вернуть код ошибки, это я исправил в своём коде, добавив одну строку.

php_zip.c вам в помощь.

/tread
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.