как распаковать gzip файл?

Тема в разделе "PHP", создана пользователем satih, 24 ноя 2010.

Статус темы:
Закрыта.
Модераторы: latteo
  1. satih

    satih

    Регистр.:
    19 сен 2008
    Сообщения:
    429
    Симпатии:
    710
    после запроса через curl с "Accept-Encoding: gzip,deflate" получаю сурс сжатый gzip-ом. пытаюсь раскрыть его содержимое с gzuncompress или gzinflate получаю ошибку
    с записью в промежуточный файл и распаковкой работает
    PHP:
    file_put_contents('gziped'$html);
    $zd gzopen('gziped'"r");
    $contents gzread($zd1000000);
    gzclose($zd);
    file_put_contents('unzipped'$contents);
    но хотелось бы не записывать в промежуточный сжатый файл, а сразу распаковать полученый запрос
     
  2. pitkina

    pitkina

    Регистр.:
    1 апр 2007
    Сообщения:
    253
    Симпатии:
    176
    с php6 вводится функция gzdecode для распаковки строки

    http://codeigniter.com/forums/viewthread/106763/#537317
     
  3. polyetilen

    polyetilen Заблокирован

    Регистр.:
    10 авг 2006
    Сообщения:
    814
    Симпатии:
    474
    в курле есть опция CURLOPT_ENCODING для декодирования сжатого ответа

    Перейти по ссылке


    для теста
    PHP:
    header('Content-Type: text/plain; charset=utf-8');

    $c curl_init();
    curl_setopt($cCURLOPT_URL'http://ya.ru');
    curl_setopt($cCURLOPT_SSL_VERIFYPEERFALSE);
    curl_setopt($cCURLOPT_USERAGENT"Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6");
    curl_setopt($cCURLOPT_TIMEOUT30);
    curl_setopt($cCURLOPT_FOLLOWLOCATION1);
    curl_setopt($cCURLOPT_RETURNTRANSFER1);
    curl_setopt($cCURLOPT_HEADER1);
    curl_setopt($cCURLOPT_REFERER'http://ya.ru');

    //даёшь gzip!
    curl_setopt($cCURLOPT_HTTPHEADER, array('Accept-Encoding: gzip,deflate'));
    //раскодируем gzip на лету
    curl_setopt($cCURLOPT_ENCODING1);

    $response curl_exec($c);
    curl_close($c);

    echo 
    $response;
     
    satih нравится это.
  4. satih

    satih

    Регистр.:
    19 сен 2008
    Сообщения:
    429
    Симпатии:
    710
    Отлично, то что нужно было, по ману на пхп.ком думал CURLOPT_ENCODING просто в хедер вставляет Accept-Encoding нужный, оказывается распаковка на лету (плюс вставляет нужный стринг в хедер).. курл не прекращает удивлять :)
    PHP:
    curl_setopt($cCURLOPT_ENCODING'gzip,deflate');
    сделал то что надо в данном случае. почему
    PHP:
    curl_setopt($cCURLOPT_HTTPHEADER, array('Accept-Encoding: gzip,deflate'));
    curl_setopt($cCURLOPT_ENCODING'1');
    работает, не ясно, по ману опции могут быть gzip, deflate и/или identity, если оставить пустым то будут все три, тут видно CURLOPT_HTTPHEADER делает правильный хедер, а курл уже расшифровывает полученое.. иначе сложно объяснить, потому что только
    PHP:
    curl_setopt($cCURLOPT_ENCODING'1');
    посылает в хедере
    PHP:
    'Accept-Encoding: 1'
    и соотвественно получает несжатый хтмл, а только
    PHP:
    curl_setopt($cCURLOPT_ENCODING'gzip,deflate');
    (без CURLOPT_HTTPHEADER) ставит в хедере
    PHP:
    'Accept-Encoding: gzip,deflate'
    и распаковывает
     
Статус темы:
Закрыта.