<?php
/**
* Распаковка страницы в gzip
* автор: Nc_Soft
* 29.05.09
*
*/
//получаем страницу, где поддерживается сжатие
$ch=curl_init('http://snippets.pp.ru/');
//настраиваем, чтобы сеанс выводился не в браузер, а в переменную
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
//заголовки тут ни к чему
//curl_setopt($ch, CURLOPT_HEADER, 1);
//задаем заголовок для сжатия Accept-Encoding: gzip, deflate
//и еще несколько заголовков за компанию (необязательно)
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Accept-Encoding: gzip, deflate',
'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Language: ru,en-us;q=0.7,en;q=0.3',
'Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7',
));
//выполняем запрос
$res = curl_exec($ch);
//закрываем сеанс cURL
curl_close($ch);
//в переменной $res у нас сжатые данные в "кракозябрах", проверка
echo $res;
//разделитель для читабельности
echo "<br /><br />\n\n";
/*самое важное: чтобы раскодировать данные надо применить функцию
gzinflate, обрезав при этом первые 10 байт!*/
echo gzinflate(substr($res, 10));
/*
Результат можно увидеть запустив snippet.
Что нам это дает?
С серверов, где поддерживается сжатие можно тащить примерно в 10 раз
меньше данных, чем раньше, тоесть грабберы будут работать шустрее.
Ну и конечно, snippets не появляются из ниоткуда,
каждый snippet решает проблему из "жизни", пример:
echo file_get_contents('http://radiorecord.ru/charts/');
Почему-то хоть убей выдается не вся страница, а примерно половина.
Запрос с использованием заголовка Accept-Encoding: gzip, deflate
позволяет получить страницу целиком, хоть и в сжатом виде.
*/