taoCMS是基于php+sqlite/mysql的国内最小(100Kb左右)的功能完善的CMS管理系统

php爬虫节约带宽必杀技:gzip压缩传输

2011-10-09

开了多进程下载器,于是带宽就成了下载瓶颈。开启gzip传输,大概可以提高4~8倍下载速度。

使用file_get_contents:

$content = file_get_contents('http://item.taobao.com/item.htm?id=4825572054');
echo 'len: ', strlen($content), "n";
 
$opts = array(
  'http'=>array(
    'method'=>"GET",
    'header'=>"Accept-language: zhrn" .
              "Accept-Encoding: gziprn"
  )
);
 
$context = stream_context_create($opts);
$content = file_get_contents('http://item.taobao.com/item.htm?id=4825572054', false, $context);
echo 'len: ', strlen($content), "n";

输出结果:

len: 121426
len: 23679

从121KB压缩成23KB,很不错吧

下载的字符串是gzip压缩格式的,需要解压,附解压字符函数一枚:

# found there : http://php.net/gzencode
function gzdecode($data) { 
  $len = strlen($data); 
  if ($len < 18 || strcmp(substr($data,0,2),"x1fx8b")) { 
    return null;  // Not GZIP format (See RFC 1952) 
  } 
  $method = ord(substr($data,2,1));  // Compression method 
  $flags  = ord(substr($data,3,1));  // Flags 
  if ($flags & 31 != $flags) { 
    // Reserved bits are set -- NOT ALLOWED by RFC 1952 
    return null; 
  } 
  // NOTE: $mtime may be negative (PHP integer limitations) 
  $mtime = unpack("V", substr($data,4,4)); 
  $mtime = $mtime[1]; 
  $xfl   = substr($data,8,1); 
  $os    = substr($data,8,1); 
  $headerlen = 10; 
  $extralen  = 0; 
  $extra     = ""; 
  if ($flags & 4) { 
    // 2-byte length prefixed EXTRA data in header 
    if ($len - $headerlen - 2 < 8) { 
      return false;    // Invalid format 
    } 
    $extralen = unpack("v",substr($data,8,2)); 
    $extralen = $extralen[1]; 
    if ($len - $headerlen - 2 - $extralen < 8) { 
      return false;    // Invalid format 
    } 
    $extra = substr($data,10,$extralen); 
    $headerlen += 2 + $extralen; 
  } 
 
  $filenamelen = 0; 
  $filename = ""; 
  if ($flags & 8) { 
    // C-style string file NAME data in header 
    if ($len - $headerlen - 1 < 8) { 
      return false;    // Invalid format 
    } 
    $filenamelen = strpos(substr($data,8+$extralen),chr(0)); 
    if ($filenamelen === false || $len - $headerlen - $filenamelen - 1 < 8) { 
             

类别:技术文章 | 阅读:234290 | 评论:0 | 标签:php gzip

想收藏或者和大家分享这篇好文章→

“php爬虫节约带宽必杀技:gzip压缩传输”共有0条留言

发表评论

姓名:

邮箱:

网址:

验证码:

公告

taoCMS发布taoCMS 3.0.2(最后更新21年03月15日),请大家速速升级,欢迎大家试用和提出您宝贵的意见建议。

捐助与联系

☟请使用新浪微博联系我☟

☟在github上follow我☟

标签云