PHP解码采用Gzip+Chunked传输的页面或者文本文档

2010年8月4日 BuyLit 没有评论

啥也不说,上代码:

if (! function_exists ( ‘gzdecode’ )) {
function gzdecode($data) {
$flags = ord ( substr ( $data, 3, 1 ) );
$headerlen = 10;
$extralen = 0;
$filenamelen = 0;
if ($flags & 4) {
$extralen = unpack ( ‘v’, substr ( $data, 10, 2 ) );
$extralen = $extralen [1];
$headerlen += 2 + $extralen;
}
if ($flags & 8 ) // Filename
$headerlen = strpos ( $data, chr ( 0 ), $headerlen ) + 1;
if ($flags & 16) // Comment
$headerlen = strpos ( $data, chr ( 0 ), $headerlen ) + 1;
if ($flags & 2) // CRC at end of file
$headerlen += 2;
$unpacked = @gzinflate ( substr ( $data, $headerlen ) );
if ($unpacked === FALSE)
$unpacked = $data;
return $unpacked;
}
}
$fp = fsockopen ( “www.amazon.cn”, 80, $errno, $errstr, 30 );
if (! $fp) {
echo “$errstr ($errno)<br />\n”;
} else {
$out = “GET /mn/detailApp?asin=B003L21OCC HTTP/1.1\r\n”;
$out .= “Host: www.amazon.cn\r\n”;
$out .= “User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; zh-CN; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3\r\nAccept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\nAccept-Language: zh-cn,zh;q=0.5\r\nAccept-Encoding: gzip;deflate\r\nAccept-Charset: GB2312,utf-8;q=0.7,*;q=0.7\r\nKeep-Alive: 115\r\nConnection: keep-alive\r\nReferer: http://www.ncbi.nlm.nih.gov/sites/entrez\r\n”;
$out .= “\r\n\r\n”;
fwrite ( $fp, $out );
$Data = ”;
while ( $a = fgets ( $fp ) ) {
$Data .= $a;
}
fclose ( $fp );
}
$pos = strpos ( $Data, “\r\n\r\n” );
if ($pos === false) {
$jj .= $Data;
} else {
$HeadInfoStr = substr ( $Data, 0, $pos );
$HeadInfo = explode ( “\r\n”, $HeadInfoStr );
$Head = array ();
$State = 0;
if (count ( $HeadInfo ) > 0) {
$Arr = explode ( ” “, $HeadInfo [0] );
$State = intval ( $Arr [1] );
$Head ['State'] = $State;
array_shift ( $HeadInfo );
}
foreach ( $HeadInfo as $v ) {
$posm = strpos ( $v, ‘:’ );
if ($posm > 0) {
$HeadKey = strtolower ( trim ( substr ( $v, 0, $posm ) ) );
$HeadStrArr = explode ( ‘;’, substr ( $v, $posm + 1, strlen ( $v ) – $posm ) );
$Head [$HeadKey] = ltrim ( $HeadStrArr [0] );
if (count ( $HeadStrArr ) > 1) {
$posm = strpos ( $HeadStrArr [1], ‘=’ );
if ($posm > 0) {
$Head [strtolower ( trim ( substr ( $HeadStrArr [1], 0, $posm ) ) )] = substr ( $HeadStrArr [1], $posm + 1, strlen ( $HeadStrArr [1] ) – $posm );
}
}
}
}
$jj = substr ( $Data, $pos, strlen ( $Data ) – $pos );
$j = $Head;
}
print_r ( $j ); //header info.
echo $result = gzdecode ( transfer_encoding_chunked_decode (ltrim($jj) ) ); //content
function transfer_encoding_chunked_decode($in) {
$out = ”;
while ( $in != ” ) {
$lf_pos = strpos ( $in, “\012″ );
if ($lf_pos === false) {
$out .= $in;
break;
}
$chunk_hex = trim ( substr ( $in, 0, $lf_pos ) );
$sc_pos = strpos ( $chunk_hex, ‘;’ );
if ($sc_pos !== false)
$chunk_hex = substr ( $chunk_hex, 0, $sc_pos );
if ($chunk_hex == ”) {
$out .= substr ( $in, 0, $lf_pos );
$in = substr ( $in, $lf_pos + 1 );
continue;
}
$chunk_len = hexdec ( $chunk_hex );
if ($chunk_len) {
$out .= substr ( $in, $lf_pos + 1, $chunk_len );
$in = substr ( $in, $lf_pos + 2 + $chunk_len );
} else {
$in = ”;
}
}
return $out;
}
分类: 技术探讨 标签: , ,

php数组自定义排序函数

2010年7月2日 BuyLit 没有评论
在很多场合需要用到数组排序,以下就是一个简单的数组排序函数。
$k是排序的依据$key
如:
$a=array(o=>array(‘weight’=>10),1=>array(‘weight’=>8),2=>array(‘weight’=>20));
$a=array_sort($a,’weight’);
返回的数据就为:
array(2=>array(‘weight’=>20),0=>array(‘weight’=>10),1=>array(‘weight’=>8));
改变倒序与顺序的在return   $a[$k]>$b[$k]?-1:1; 这一句,把-1与1对调即可。
function array_sort($array, $k) {
$asc_func = create_function ( ‘$a,$b’, ‘
$k   =   “‘ . $k . ‘”;
if($a[$k]   ==   $b[$k])   return   0;
return   $a[$k]>$b[$k]?-1:1;
‘ );
usort ( $array, $asc_func );
return $array;
}

PHP自动编码URL中中文的函数

2010年7月2日 BuyLit 没有评论
在获取远程目标的时候,部分站点会有含有中文名称的地址。一些浏览器会自动编码中文内容,但是PHP程序可没那么智能,以下是一个自动将URL中的中文urlencode掉的函数。
function UrlChineseEncode($str) {
$restr = ”;
$length = strlen ( $str );
for($i = 0; $i < $length; $i ++) {
$restr .= ord ( $str [$i] ) > 127 ? urlencode ( $str [$i] . $str [++ $i] . $str [++ $i] ) : $str [$i];
}
return $restr;
}
分类: 技术探讨 标签: , , ,

常见问题

2010年6月12日 BuyLit 没有评论

Q:这是一个什么样的网站?

A:我们搜集各大商城的促销活动,有价值的信息并发布出来。希望能给您网购带来最大限度地节约。

Q:我可以发布分享促销信息吗?

A:当然可以,我们非常鼓励这一行为。并且还很方便,您只需要复制链接到这里提交即可。

Q:忘记密码了怎么办?

A:不用慌,您可以通过此链接来重置密码,只要您记得您的邮箱或者账号即可,我们会发送一封重置密码信件到您的邮箱里面。

Q:为什么要注册?

A:在Buylit,几乎所有的操作都无需您注册。但是在某些地方或者服务需要您使用一个凭证,如评论,查看点击记录。同时,注册之后我们会有更多针对性地服务于您。

分类: 帮助文档 标签:

商城合作

2010年6月12日 BuyLit 没有评论

我们非常希望能够与各个商城进行更深层次地合作,如果您有合作的意向,烦请联系我们:

Email:buylit@buylit.com

分类: 帮助文档 标签:

联系我们

2010年6月2日 BuyLit 没有评论

如果您有任何疑惑、愤怒、建议、批评、称赞以及合作,都可以随时与我们联系:

Email:admin@buylit.com

buylit@buylit.com

—————

分类: 帮助文档 标签:

返现问题

2010年6月2日 BuyLit 没有评论

经过实际的调查以及测试,我们认为一条有用的促销信息比返现能够为您节省得更多,并且返现给您带来的一些麻烦并不符合我们开设这个网站的初衷。所以我们取消了返现,非常抱歉。

希望我们的这些能让您感到自然并给您带来愉悦和省心,购物本该如此。

分类: 帮助文档 标签:

欢迎来到Buylit

2010年5月14日 BuyLit 没有评论

Buylit成立于2010年5月,她被成立的初衷是方便大家在购物之前能够方便,自然地得到有价值的促销信息,并通过价格搜索来选择最合适商家,希望能在这个过程中给您生活带来实惠与方便。

目前国内有很多返现的网站,但我们并不支持返现。其实在设计之初,我们也是支持返现的,但是经过实际的调查之后我们发现这会给购物带来一些麻烦,而且容易丢单。我们不想让您在购物支付之前还得反复检查确认返现是否起作用,这不符合我们开设这个网站的初衷。事实上一条有用的促销信息能够节约下来的价钱远远超过返现的数量,所以我们打算更多地注意到有价值促销信息的搜集上面。

有些同学可能会觉得我们是不是舍不得分成,我想时间会证明这一切的,我们随时会有一系列的奖励活动,以此来答谢大家的厚爱。

您如果发现了好的促销信息,我们非常希望以及鼓励您能与大家一起分享,通过此链接即可快速提交,我们的工作人员会将此信息完善并发布。

啰嗦了这么多,最后祝大家购物愉快。

分类: 帮助文档 标签: