本文目錄一覽:
- 1、php 怎麼模擬 GZIPOutputStream函數 得到數據 能被GZIPInputStream解壓?
- 2、使用php判斷網頁是否gzip壓縮
- 3、PHP gzip 壓縮後和 java deflate 數據不一致的問題?
php 怎麼模擬 GZIPOutputStream函數 得到數據 能被GZIPInputStream解壓?
可以用java寫完,然後php調用端口,剛才百度了下,好像沒有原生的函數可用
使用php判斷網頁是否gzip壓縮
昨天晚上群里有朋友採集網頁時發現file_get_contents
獲得的網頁保存到本地為亂碼,響應的header
里
Content-Encoding:gzip
但在瀏覽器里看是正常的。
因為我有過相關經驗馬上發現是網站開啟了gzip而file_get_contents
獲得的是壓縮過的頁面,而不是解壓過的頁面(不知道是不是要file_get_conttents
請求網頁時帶上相應的參數,直接獲得沒有被gzip壓縮過的網頁?)
剛好我前不久剛看到可以用讀取文件的前2個字節判斷文件類型。群裡面的朋友也說gzip壓縮過的網頁(gbk編碼)前2字節是
1F
8B
於是就可以判斷網頁是否gzip壓縮過。
代碼如下:
複製代碼
代碼如下:
//米爾軍事網採用
gzip壓縮網頁
//file_get_contents
直接獲得的網頁是亂碼。
header(‘Content-Type:text/html;charset=utf-8’
);
$url
=
”;
$file
=
fopen($url,
“rb”);
//只讀2字節
如果為(16進制)1f
8b
(10進制)31
139則開啟了gzip
;
$bin
=
fread($file,
2);
fclose($file);
$strInfo
=
@unpack(“C2chars”,
$bin);
$typeCode
=
intval($strInfo[‘chars1’].$strInfo[‘chars2’]);
$isGzip
=
0;
switch
($typeCode)
{
case
31139:
//網站開啟了gzip
$isGzip
=
1;
break;
default:
$isGzip
=
0;
}
$url
=
$isGzip
?
“compress.zlib://”.$url:$url;
//
三元表達式
$mierHtml
=
file_get_contents($url);
//獲得米爾軍事網數據
$mierHtml
=
iconv(“gbk”,”utf-8″,$mierHtml);
echo
$mierHtml;
PHP gzip 壓縮後和 java deflate 數據不一致的問題?
gzinflate 是解壓 gzdeflate 數據的啊,現在是想壓縮後和 java deflate 壓縮的數據一致。又看了下資料,java Deflater(int level,boolean nowrap) 壓縮,如果參數 ‘nowrap’ 為 true,則不使用 ZLIB 頭和校驗和字段,默認好像是 false。而採用 PHP gzencode ($data , -1, FORCE_DEFLATE ) 進行壓縮,只是帶了zlib headers 信息,沒有帶 crc32 checksum,可能問題就在這兒,但是還不知道怎麼解決,還請好心的版主給點建議!
原創文章,作者:IIIM,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/140214.html