За последние 24 часа нас посетили 18889 программистов и 1708 роботов. Сейчас ищет 881 программист ...

Проблема с gzinflate, при распаковке тела ответа сервера.

Тема в разделе "Прочие вопросы по PHP", создана пользователем newroze, 1 сен 2009.

  1. newroze

    newroze Активный пользователь

    С нами с:
    19 авг 2009
    Сообщения:
    10
    Симпатии:
    0
    Проблема в распаковке сжатого(gzip) содержимого тела ответа сервера. Результат распаковки странный, первая половина данных(в начале) распаковывается нормально, вторая половина как-то криво(видно что распаковывается в текст но в нечленораздельный текст)
    Запись тела ответа в файл идёт так:
    Код (Text):
    1.  
    2. $h_log = fopen("./debug", 'a');
    3. while ( $response_line = fgets($sock) ) { // чтение из сокета
    4.     //тут вырезаются хидеры тела ответа сервера + 10 байт сигнатуры gzip, и длина тела
    5.     fwrite($h_log, $msg, strlen($msg));
    6. }
    7. fclose($h_log);
    Для тестов вот так распаковываю сжатый контент, сохранённый выше в файл:
    Код (Text):
    1.  
    2. $body = file_get_contents('./debug', 'FILE_BINARY');
    3. echo strlen($body).':'.filesize('./debug');
    4. if ( @gzinflate($body, 0) ) {
    5.     echo(@gzinflate($body, 0));
    6. }
     
  2. newroze

    newroze Активный пользователь

    С нами с:
    19 авг 2009
    Сообщения:
    10
    Симпатии:
    0
    Проблема решилась, корень зла был в Transfer-Encoding: chunked