php對gzip文件或者字符串解壓實例參考
更新時間:2008年07月25日 23:13:06 作者:
要采集一個網(wǎng)站,目標站采用了gzip壓縮傳輸網(wǎng)頁,本來應該只要發(fā)送一個http頭 Accept-Encoding: identity或者干脆不發(fā)送這個頭等,就可以使目標站返回沒有經(jīng)過gzip壓縮的頁面了,不過很不幸,目標站無視客戶端的請求,仍然返回gzip數(shù)據(jù),造成亂碼。
其實php對gzip解壓很簡單,用內(nèi)置的gzdecode函數(shù)就可以了,不過很可惜我配置了半天也無法支持gzdecode函數(shù),所以只好變通一下:
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;
}
}
調(diào)用方法很簡單:
$f=@file_get_contents("http://www.dbjr.com.cn");
echo gzdecode($f);
復制代碼 代碼如下:
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;
}
}
調(diào)用方法很簡單:
復制代碼 代碼如下:
$f=@file_get_contents("http://www.dbjr.com.cn");
echo gzdecode($f);
相關文章
解析php中die(),exit(),return的區(qū)別
本篇文章是對php中die(),exit(),return的區(qū)別進行了詳細的分析介紹,需要的朋友參考下2013-06-06PHP頁面靜態(tài)化的優(yōu)缺點與實現(xiàn)
眾所周知,頁面靜態(tài)化是門戶網(wǎng)站研發(fā)中必備的一項技能,本課程從純靜態(tài)化和偽靜態(tài)化兩個角度進行分析,帶領大家掌握在PHP中如何生成純靜態(tài)化頁面,在WEB服務器中如何配置偽靜態(tài),幫助大家掌握又一項加薪利器2023-02-02PHP使用debug_backtrace方法跟蹤調(diào)試代碼調(diào)用詳解
這篇文章主要介紹了PHP使用debug_backtrace方法跟蹤調(diào)試代碼調(diào)用,結合實例形式詳細分析了debug_backtrace函數(shù)的功能、參數(shù)、使用方法及相關操作注意事項,需要的朋友可以參考下2018-07-07