Определение размера данных в архиве

vovanium

Новичок
Определение размера данных в архиве

Подскажите, как можно определить оригинальный размер файла сжатого gzip или bzip2. Т.е. например, есть файл сжатый gzip'ом нужно определить сколько занимает этот файл без сжатия.

-~{}~ 05.05.04 16:51:

А почему тему в offtopic перенесли? Или на php такое невозможно сделать?
 

vovanium

Новичок
И что там? Я знаю как можно создавать/читать архивы в php. Меня интересует как максимально быстро определить реальный размер данных в архиве не распаковывая файл? В голову приходит только чтение блоками (например, по килобайту) и подсчет таким образом размера несжатого файла.

P.S.: Речь идет о больших файлах (дамп БД), размер которых легко может превышать сотни метров.
 

IntenT

SkyDiver
тебе дали ссылки. ты даже посмотреть их неудосужился, и орешь, что там ничего нет.

[m]zip_entry_filesize[/m]
 

Silent

Новичок
Использовать консольные версии архиваторов в нужными ключиками а потом парсить результат.
 

SiMM

Новичок
Автор оригинала: bakh
После поверхностного просмотра, я бы сказал, что "скорее невозможно"...
Преждевременное, имхо, предположение (не знаю, как насчёт стандартных функций). Как минимум в zip'е и rar'е подобная информация вполне достаётся без распаковки (правда, пройтись по файлу функциями типа [m]fseek[/m] и [m]fread[/m], если делать это на PHP, всё же придётся) - по поводу gzip'а и bzip2 абсолютной уверенности нет (не знаком с внутренним форматом архивов), но вполне возможно, что ситуация такая же. Либо же воспользоваться советом Silentа
 

Profic

just Profic (PHP5 BetaTeam)
>по поводу gzip'а и bzip2 абсолютной уверенности нет
gzip хранит оригинальный размер так же как и оригинальное имя
bz2 нет
Проверено на плагинах к Total Commander-у
 

bakh

Абалдуй
SiMM Ну, я ж и сказал, что "после поверхностного"... :) Вон и IntenT уже нашёл чтой-то...
Вопрос в том, что товарисчь vovanium, установив у себя PHP, не скачал себе phpmanual.chm или что там в его системе подходит... Или просто забыл про Руководство по PHP... :)
А когда ему дали ещё и наводящие ссылки, которые находятся там методом 30-тисекундного просмотра, ещё и выпендриваться стал... ;)
 

vovanium

Новичок
Вопрос в том, что товарисчь vovanium, установив у себя PHP...
Какая буйная фантазия. PHP вообще-то я уже занимаюсь довольно давно и свежая дока всегда под рукой. Я знаю, что такой стандартной функции в доках нет (zip архивы меня не интересовали, там всё ясно, я вроде четко указал что это нужно для gzip и bzip2), или программирование на php заключается в поиске стандартных функций в доках, и если их там нет - то задача не решаемая?
А когда ему дали ещё и наводящие ссылки, которые находятся там методом 30-тисекундного просмотра, ещё и выпендриваться стал
Вообще-то выпендриваешься тут ты. Этих ссылок я тебе и сам мог надавать. И хоть я видел уже, что там написано, все равно просмотрел их, пытаясь понять, что ты хотел сказать своим ответом. После этого задал вопрос "И что там?", который совсем не означает, что мне лень посмотреть что там, он означает с какой целью ты мне давал эти ссылки? Просто так, чтобы показыть, как быстро ты умеешь искать в доках слова gzip и bzip2?
После поверхностного просмотра, я бы сказал, что "скорее невозможно"...
Вот видишь, ты сам-то не юзал этих функций, а начинаешь учить других.
gzip хранит оригинальный размер так же как и оригинальное имя
bz2 нет
Вообще, смущает тот факт, что архив создается без промежуточного файла (т.е. изначально не известно какой размер исходного файла, как я уже сказал сжимается дамп БД)
ИМХО, gzip не хранит имя в архиве, имя, размеры и другая служебная инфа сохраняются в tar.gz, т.е. сначала файлы записываются в tar с дополнительной служебной инфой, а потом сжимаются gzip'ом. А вот оригинальный размер скорее всего в gzip есть, т.к. winrar довольно быстро его определяет.
Кто-то встречал доку с описанием формата gzip (а то я в основном натыкаюсь на то как его использовать и исходники).

P.S. Пока что сделал по-своему, в принципе для gzip работает довольно быстро, а вот для bzip2 - медленно :(. Так что, если кто-то встретит решение проблемы или инфу которая поможет её решить (только не нужно общих ссылок типа gzip.org, если уж даете ответ давайте, что-то более-менее конкретное, иначе, лучше промолчите, не тратьте своё и чужое время)
 

bakh

Абалдуй
Автор оригинала: vovanium
Вообще-то выпендриваешься тут ты. Этих ссылок я тебе и сам мог надавать. И хоть я видел уже, что там написано, все равно просмотрел их, пытаясь понять, что ты хотел сказать своим ответом. После этого задал вопрос "И что там?", который совсем не означает, что мне лень посмотреть что там, он означает с какой целью ты мне давал эти ссылки? Просто так, чтобы показыть, как быстро ты умеешь искать в доках слова gzip и bzip2?
Вот видишь, ты сам-то не юзал этих функций, а начинаешь учить других.
Прочитал твоё "Обращение к крестьянам"...
Долго думал...
Понял, что ты хотел спросить про разные зипы, ответы знал, докой и поиском пользоваться умеешь...

Так в чём тогда смысл твоего вопроса состоял?..
 

tony2001

TeaM PHPClub
vovanium
>ИМХО, gzip не хранит имя в архиве, имя, размеры и другая служебная инфа сохраняются в tar.gz,
>т.е. сначала файлы записываются в tar с дополнительной служебной инфой, а потом сжимаются gzip'ом.
конечно.

>А вот оригинальный размер скорее всего в gzip есть, т.к. winrar довольно быстро его определяет.
ты не замечаешь, что ты сам себе противоречишь?

>gzip не хранит имя в архиве, имя, размеры
>А вот оригинальный размер скорее всего в gzip есть

gzip не делает архивы, gzip сжимает данные ему данные (пардон за каламбур).
в кач-ве данных может быть и *.tar, который уже и является архивом.
аналогично и bz2.
на этом можно было бы и закончить, но если тебе так интересно, то загляни в zlib.h и посмотри какие функции там экспортируются.
естественно, что никакого упоминания про размер файлов ты там не найдешь.

bakh
вы еще пингами начните меряться.
 

vovanium

Новичок
gzip не делает архивы, gzip сжимает данные ему данные (пардон за каламбур).
Ну если считать архивом сжатый файл, то делает :)
Можешь называть это сжатым файлом какая разница.
Так в чём тогда смысл твоего вопроса состоял?..
Я вроде ясно спросил, мне нужно узнать размер несжатых данных в файлах сжатыми gzip и bzip2, я не спрашивал как их создавать/открывать и т.п.
гоша
Большое спасибо за ответ по теме.
 

tony2001

TeaM PHPClub
>последние четыре байта каждого блока -- размер несжатых данных.
расскажите мне:
какое отношение ЭТО имеет к "как можно определить оригинальный размер файла сжатого gzip или bzip2" ?

-~{}~ 06.05.04 19:35:

есть некоторое впечатление, что автор вопроса слабо представляет что ему нужно.
vovanium
приведи пример архива, возможно, станет яснее.
 

vovanium

Новичок
какое отношение ЭТО имеет к "как можно определить оригинальный размер файла сжатого gzip или bzip2" ?
Это как раз то, что нужно, читаешь последние четыре байта файла это и есть оригинальный размер данных.
приведи пример архива, возможно, станет яснее.
Запросто. Создаем архивчик, например:
PHP:
$zp = gzopen('test.gz', "w7");
gzwrite($zp, 'Hello world!');
gzclose($zp);
Теперь нужно имея этот архивчик, через некоторое время узнать оригинальный размер данных, в нашем случае это будет 12 байт.
Но как я уже написал выше, с gzip задача решена. Осталось еще с bzip2 разобраться.
Архив != сжатый_файл - tar тоже считается архивом.
Какая разница, мы же не терминологию обсуждаем. Вот смотрю инфо .gz файла в WinRAR, там написано "GZIP архив" :)
От того, что я его назову сжатый файл Gzip или файл сжатый Gzip его формат из-за этого не изменится.
 
Сверху