亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > PHP > 正文

PHP中的gzcompress、gzdeflate、gzencode函數詳解

2024-05-04 23:24:37
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了PHP中的gzcompress、gzdeflate、gzencode函數詳解,本文深入分析了它們的相同點和不同點,需要的朋友可以參考下
 
 

PHP中存在一組看起來很像的壓縮解壓函數:

壓縮函數:gzcompress gzdeflate gzencode

解壓函數:gzuncompress gzinflate gzdecode

gzdecode是PHP 5.4.0之后才加入的,使用的時候要注意兼容性問題。

這幾個函數都以gz開頭,讓人想到gzip壓縮,而光看函數名卻又看不出它們之間的區別,只能查文檔。

gzcompress gzdeflate gzencode函數的區別在于它們壓縮的數據格式不同:

gzcompress使用的是ZLIB格式;

gzdeflate使用的是純粹的DEFLATE格式;

gzencode使用的是GZIP格式;

但是有一點是相同的,它們壓縮數據時都使用了DEFLATE壓縮算法(理論上ZLIB和GZIP格式可以使用其他的壓縮算法,但是目前實踐中只使用DEFLATE算法),ZLIB和GZIP只不過是在DEFLATE的基礎之上加了一些頭部和尾部而已。

順便提一下,HTTP協議中的Content-Encoding: deflate使用的是ZLIB格式而不是純DEFLATE格式。

從PHP 5.4.0開始,gzcompress和gzdeflate函數加入了第三個參數$encoding,可以是三個常量:

ZLIB_ENCODING_RAW 對應于純DEFLATE格式;

ZLIB_ENCODING_GZIP 對應于GZIP格式;

ZLIB_ENCODING_DEFLATE 對應于ZLIB格式(注意不是純DEFLATE格式);

雖然文檔沒有提及,但是這三個常量也可以用在gzencode函數的第三個參數$encoding_mode中。

其實從PHP 5.4.0開始,這三個函數是一樣的,只不過第三個參數的默認值不同;如果調用時傳入第三個參數,那么這三個函數返回的數據相同。可以寫一個簡單的腳本測試:

 

復制代碼代碼如下:

<?php
$url = 'http://www.vevb.net';
$s1 = gzdeflate($url, 1);
$s2 = gzencode($url, 1, ZLIB_ENCODING_RAW);
if (strcmp($s1, $s2) == 0) echo 'the same';
?>

 

運行可以看到$s1和$s2是相同的,為什么會這樣呢?可以從PHP源碼中找到答案,打開php-5.5.4/ext/zip/zlib.c,可以找到這樣的代碼:

 

復制代碼代碼如下:

#define PHP_ZLIB_ENCODE_FUNC(name, default_encoding) /
static PHP_FUNCTION(name) /
{ /
    char *in_buf, *out_buf; /
    int in_len; /
    size_t out_len; /
    long level = -1; /
    long encoding = default_encoding; /
    if (default_encoding) { /
        if (SUCCESS != zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|ll", &in_buf, &in_len, &level, &encoding)) { /
            return; /
        } /
    } else { /
        if (SUCCESS != zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sl|l", &in_buf, &in_len, &encoding, &level)) { /
            return; /
        } /
    } /
    if (level < -1 || level > 9) { /
        php_error_docref(NULL TSRMLS_CC, E_WARNING, "compression level (%ld) must be within -1..9", level); /
        RETURN_FALSE; /
    } /
    switch (encoding) { /
        case PHP_ZLIB_ENCODING_RAW: /
        case PHP_ZLIB_ENCODING_GZIP: /
        case PHP_ZLIB_ENCODING_DEFLATE: /
            break; /
        default: /
            php_error_docref(NULL TSRMLS_CC, E_WARNING, "encoding mode must be either ZLIB_ENCODING_RAW, ZLIB_ENCODING_GZIP or ZLIB_ENCODING_DEFLATE"); /
            RETURN_FALSE; /
    } /
    if (SUCCESS != php_zlib_encode(in_buf, in_len, &out_buf, &out_len, encoding, level TSRMLS_CC)) { /
        RETURN_FALSE; /
    } /
    RETURN_STRINGL(out_buf, out_len, 0); /
}

 


/* NOTE: The naming of these userland functions was quite unlucky */
/* {{{ proto binary gzdeflate(binary data[, int level = -1[, int encoding = ZLIB_ENCODING_RAW])
   Encode data with the raw deflate encoding */
PHP_ZLIB_ENCODE_FUNC(gzdeflate, PHP_ZLIB_ENCODING_RAW);
/* }}} */

/* {{{ proto binary gzencode(binary data[, int level = -1[, int encoding = ZLIB_ENCODING_GZIP])
   Encode data with the gzip encoding */
PHP_ZLIB_ENCODE_FUNC(gzencode, PHP_ZLIB_ENCODING_GZIP);
/* }}} */

/* {{{ proto binary gzcompress(binary data[, int level = -1[, int encoding = ZLIB_ENCODING_DEFLATE])
   Encode data with the zlib encoding */
PHP_ZLIB_ENCODE_FUNC(gzcompress, PHP_ZLIB_ENCODING_DEFLATE);
/* }}} */

 

可以看到,gzdeflate gzencode gzcompress三個函數都是用相同的PHP_ZLIB_ENCODE_FUNC宏定義的(是不是有些泛型的意味?),所以它們當然是相同的。

代碼中的注釋也承認這幾個函數的名字起得不好,至于為什么會用這樣的名字就不得而知了。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲国产精彩中文乱码av在线播放| 黑人巨大精品欧美一区二区一视频| 亚洲天堂男人的天堂| 国精产品一区一区三区有限在线| 亚洲人成网站在线播| 欧美老少做受xxxx高潮| 国产精品电影网站| 久久全国免费视频| 欧美激情女人20p| 国产精品夫妻激情| 亚洲性日韩精品一区二区| 98视频在线噜噜噜国产| 日韩欧亚中文在线| 国产一区香蕉久久| 亚洲精品福利免费在线观看| 日日摸夜夜添一区| 国产精品一区二区女厕厕| 不卡av电影院| 亚洲欧美日本另类| 91精品国产亚洲| 成人网页在线免费观看| 2024亚洲男人天堂| 欧美激情精品久久久久久蜜臀| 69久久夜色精品国产69乱青草| 国产日本欧美一区二区三区在线| 久久久久久这里只有精品| 亚洲天堂免费视频| 在线观看欧美www| 九九九热精品免费视频观看网站| 久久免费国产视频| 国产精品96久久久久久又黄又硬| 国产精品免费一区豆花| 午夜精品福利视频| 亚洲精品国产精品国产自| 成人高清视频观看www| 亚洲综合日韩中文字幕v在线| xxav国产精品美女主播| 亚洲伊人一本大道中文字幕| 成人免费午夜电影| 成人h片在线播放免费网站| 亚洲欧美一区二区三区情侣bbw| 九九精品在线播放| 亚洲人成在线电影| 久久99久国产精品黄毛片入口| 欧美在线视频一区二区| 亚洲精品久久久久久久久久久久| 欧美性生交xxxxxdddd| 色妞一区二区三区| 色噜噜久久综合伊人一本| 久久精品国产2020观看福利| 欧美成人精品一区二区| 久久久国产精品亚洲一区| 亚洲成人激情图| 亚洲欧美激情一区| 色琪琪综合男人的天堂aⅴ视频| 精品高清美女精品国产区| 日韩免费观看av| 欧美激情一区二区三区在线视频观看| 久久精品99无色码中文字幕| 国产精品亚洲第一区| 国产亚洲欧美视频| 色樱桃影院亚洲精品影院| 4438全国成人免费| 欧美美最猛性xxxxxx| 国产精品入口免费视| 2020久久国产精品| 97精品久久久中文字幕免费| 欧美激情国内偷拍| 国产成人一区三区| 欧美一级视频免费在线观看| 亚洲图片制服诱惑| 日韩免费看的电影电视剧大全| 91在线观看免费观看| 美女久久久久久久久久久| 日韩精品有码在线观看| 色狠狠久久aa北条麻妃| 自拍偷拍亚洲一区| 久久久久久久久久国产精品| 九九热视频这里只有精品| 欧美在线国产精品| 亚洲国产精品久久久| 亚洲伊人一本大道中文字幕| 色婷婷综合久久久久| 国产精品狠色婷| 欧美老少做受xxxx高潮| 粉嫩老牛aⅴ一区二区三区| 成人av色在线观看| 亚洲伊人一本大道中文字幕| 国产z一区二区三区| 日韩欧美在线网址| 欧美激情视频给我| 亚洲精品一区二区网址| 日韩电影免费在线观看中文字幕| 久久天堂av综合合色| 一区二区三区天堂av| 色天天综合狠狠色| 亚洲国产精品成人av| 国产精品久久久久久av下载红粉| 国产成人精品电影| 丰满岳妇乱一区二区三区| 国产专区精品视频| 18一19gay欧美视频网站| 亚洲午夜激情免费视频| 国产精品99久久久久久www| 欧美xxxwww| 中文字幕久热精品视频在线| 中文日韩在线视频| 国产精品在线看| 国产欧美日韩亚洲精品| 亚洲性生活视频在线观看| 欧美激情小视频| 久久精品免费电影| 欧美日韩成人免费| 91网站免费观看| 亚洲一区二区三区成人在线视频精品| 国产精品视频xxx| 精品久久久久久国产| 亚洲欧洲自拍偷拍| 欧美日本高清一区| 亚洲精品在线91| 亚洲网站在线观看| 欧美剧在线观看| 欧美视频在线观看 亚洲欧| 欧美日韩aaaa| 欧美极品少妇xxxxⅹ喷水| 国产精品入口日韩视频大尺度| 亚洲一区二区久久久久久| 日韩人在线观看| 亚洲美女福利视频网站| 欧美国产日韩一区二区| 亚洲人成伊人成综合网久久久| 国产香蕉97碰碰久久人人| 亚洲人成电影网站色…| 欧美国产极速在线| www日韩欧美| 国产一区视频在线| 欧美亚州一区二区三区| 国产精品高潮在线| 久久精品一本久久99精品| 国产精品一区二区电影| 中文字幕久久久av一区| xxav国产精品美女主播| 精品久久久久久久久久久久| 亚洲欧美激情另类校园| 亚洲专区国产精品| 精品久久久久国产| 日韩最新中文字幕电影免费看| 国产精品私拍pans大尺度在线| 欧美亚洲在线播放| 中文字幕精品久久| 最好看的2019年中文视频| 国产亚洲精品久久久久动| 久久亚洲精品小早川怜子66| 日韩免费视频在线观看| 91成人在线播放| 成人女保姆的销魂服务| 久久久久中文字幕| 亚洲国产精品字幕| 中文字幕亚洲欧美一区二区三区| 日韩欧美高清视频| 色爱精品视频一区| 亚洲一区二区三区在线免费观看| xvideos成人免费中文版| 91探花福利精品国产自产在线|