Расшифровка gzip (с использованием PHP-сокетов) - PullRequest
1 голос
/ 12 августа 2010

Хорошо, есть такая реализация PHP API Last.FM на PHP, которую написал какой-то парень, и я использую ее для небольшого моего проекта. Его реализация не запрашивает сжатые данные с серверов Last.FM, поэтому я решил изменить его реализацию для работы с gzip, чтобы уменьшить пропускную способность. У меня нет проблем с запросом данных в формате gzipped, все работает нормально, и все данные сжимаются (проверено). Проблема в расшифровке. Я довольно новичок в PHP и пытался расшифровать его последние два дня, но ничего из того, что я пробовал, не сработало. : D

Вот функция, которая запрашивает и получает данные. Если бы кто-нибудь мог помочь мне сделать так, чтобы эта функция декодировала данные, я был бы очень благодарен.

function send ($msg) {
    // Send message over connection
    fwrite($this->handle, $msg);

    $response = array();
    $line_num = 0;
    while ( !feof($this->handle) ) {
        $response[$line_num] =  fgets($this->handle, 4096);
        $line_num++;
    }

    // Return response as array
    return $response;
}

где $ this-> handle равен

    $this->handle = fsockopen($this->host, $this->port, $this->error_number, $this->error_string);

Спасибо =)

1 Ответ

0 голосов
/ 12 августа 2010

Вы пробовали что-то вроде ...


$response='';
while(!feof($this->handle)) {
  $response.=fgets($this->handle, 4096);
}
$response=gzdecode($response);
return explode("\n",$response);

Im при условии, что весь ответ gzipped , а не каждая строка в отдельности. Если это каждая строка, вам просто нужно изменить fgets () на gzdecode (fgets ()) ..

...