Распаковка на лету gzip ответа сервера

Dromok

Новичок
Распаковка на лету gzip ответа сервера

Возникла такая необходимость с помощью php-скрипта скачивать в инете страницы сжатые gzip.
После продолжительной возни с zlib функциями(которые строку распаковывают), так ничего и не получилось. Все функции выдают data error :(
Я уже и вырезал первые и последние байты из полученного ответа сервера, но ничего не помогает.
Может кто-то уже подобное реализовывал? Конечно не хотелось бы создавать временных файлов, а распаковывать прямо на лету. Но если на лету никак не получится, то что именно надо записать во временный файл (всмысле сервер шлет еще лишние байты с дополнительной инфой, я так понимаю их надо обрезать)?
 

Alexandre

PHPПенсионер
А средствами zlib никак нельзя это сделать?
думаю можно, т.к. они реализуют алгоритм gzip
This module enables you to transparently read and write gzip (.gz) compressed files, through versions of most of the filesystem functions which work with gzip-compressed files (and uncompressed files, too, but not with sockets).

Note: Version 4.0.4 introduced a fopen-wrapper for .gz-files, so that you can use a special zlib: URL to access compressed files transparently using the normal f*() file access functions if you prefix the filename or path with zlib: when calling fopen(). This feature requires a C runtime library that provides the fopencookie() function. Up to now the GNU libc seems to be the only library that provides this feature.
конкретно втою задачу я не реализовывал...
 

Dromok

Новичок
я всё-таки решил эту задачу
берем функцию gzdecode отсюда http://www.php.net/manual/ru/function.gzencode.php (там в коментах ктото привел)
дело в том что сервер шлет лишнюю информацию, которую нужно обрезать
это первые 3 байта перед десятибайтовым заголовком gzip и после него несколько байтов. и еще в конце файла 7 байтов.
Я делаю это так
Код:
list($headers, $file) = explode("\r\n\r\n", $temp, 2); //обрезаем http заголовок
$gzhead = substr($file, 3, 10); //вырезаем десятибайтовый заголовок gzip
$body = substr($file, 21); //вырезаем непосредственно сжатые данные
$gzfull = $gzhead.$body; //соединяем 
$gzfull = substr($gzfull, 0, strlen($gzfull)-7); //обрезаем последние 7 байтов
$gzfull = gzdecode($gzfull); //распаковываем
 
Сверху