gzencode java_gzencode - [ php中文手册 ] - 在线原生手册 - php中文网

用户评论:

[#1]

geompse at gmail dot com [2011-08-22 15:24:36]

Had some trouble finding the correct way to send a Content-Length header with HTTP compression.

The pitch is to use gzencode (not gzdeflaten not gzcompress).

[#2]

Sam Dowling [2011-07-06 07:30:55]

this is a benchmark test of gzencode (.txt file)

----------------------------------------------

original file size = 3.29 MB (3,459,978 bytes)

compress lvl 1 = 1.09 MB (1,144,006 bytes)

compress lvl 2 = 1.06 MB (1,119,518 bytes)

compress lvl 3 = 1.03 MB (1,085,567 bytes)

compress lvl 4 = 953 KB (976,538 bytes)

compress lvl 5 = 909 KB (931,486 bytes)

compress lvl 6 = 910 KB (932,516 bytes)

compress lvl 7 = 910 KB (932,608 bytes)

compress lvl 8 = 910 KB (932,646 bytes)

compress lvl 9 = 910 KB (932,652 bytes)

----------------------------------------------

[#3]

getmequick at dot com [2009-01-23 12:29:22]

NOTE:

doing like this and so on

file_put_contents('output.gz',gzencode(file_get_contents('input.file'),9));?>

(complete file reading)

may cause memory overflow (Fatal error: Allowed memory size of ..), so it's better to read by parts/bytes.

[#4]

katzlbtjunk at hotmail dot com [2008-04-30 01:58:47]

Aaron G. 07-Aug-2004 03:29 posted the excellent function gzdecode() (SEE BELOW)

BUGFIX: Change: if($flags & 1) to ... if($flags & 2)

Unfortunately the function gzencode() does NOT append a CRC! So the previous version worked with output of gzencode but not with output of the gzip program itself.

[#5]

gazj at nukemodified dot com [2008-04-14 17:47:27]

here is my clean up of supaplex %at% pcbkits %d0t% c0m

submission above.

function alt_gzdecode($gzdatadecode) {

// seed with microseconds since last "whole" second.

mt_srand((float)microtime()*1000000);

$eh="/tmp/php-" . md5(mt_rand(0,mt_getrandmax())) . ".gz";

if(file_exists($eh)){

$gzf=fopen($eh,"w");

fwrite($gzf,$gzdatadecode);

fclose($gzf);

$gzf = gzopen ($eh, "r");

$gzdatadecode=gzpassthru($gzf);

unlink($eh);

return $gzdatadecode;

}else{

return 'File '.$eh.' was not found.';

}

}

[#6]

cbrunon at free dot fr [2006-08-03 18:52:01]

Correct is:

file_put_contents('output.gz',gzencode(file_get_contents('input.file'),9));?>

[#7]

tychay at alumni dot caltech dot edu [2002-04-03 02:53:28]

The 10 byte string in gzencode is the standard gzip header. The first two bytes (1f 8b) define the return as a gzip file, the third byte (08) means that the body is compressed using the "deflate" algorithm. The rest is padding (00)'s.

Technically, I believe one should check if the third byte is hex 08 and if so strip off the first ten bytes and last four bytes and run inflate on it. The last four bytes are file size and checksum bits.

In practice, you can get away with just stripping the first 10 bytes and running inflate on it.

Hope this helps,

terry

[#8]

henryk at ploetzli dot ch [2002-02-14 18:28:36]

[#9]

mm.. oops? - amendum (yes, tested hehe.) [2001-09-09 00:14:47]

function alt_gzdecode($str) {

// seed with microseconds since last "whole" second

mt_srand((float)microtime()*1000000);

$eh="/tmp/php-" . md5(mt_rand(0,mt_getrandmax())) . ".gz";

$fd=fopen($eh,"w");

fwrite($fd,$str);

fclose($fd);

unset($str);

$fd = gzopen ($eh, "r");

while (1==1) {

$s=gzread($fd,10240);

if ("$s" == "") {

break;

}

$str=$str . $s;

}

unlink($eh);

return $str;

}

[#10]

< supaplex %at% pcbkits %d0t% c0m > [2001-09-08 23:48:54]

I was almost discouraged when I didn't find a gzdecode() function!  However, fear not, for I'll contribute my work... :)

function alt_gzdecode($str) {

// seed with microseconds since last "whole" second.

mt_srand((float)microtime()*1000000);

$eh="/tmp/php-" . md5(mt_rand(0,mt_getrandmax())) . ".gz";

$fd=fopen($eh,"w");

fwrite($fd,$str);

fclose($fd);

$fd = gzopen ($eh, "r");

$str=gzpassthru($fd);

unlink($eh);

return $str;

}

It's only ugly point is that it does not check to see if the file already exists.  You may also have to adjust reference names like $str and $fd if they stomp on your code. (Sorry, but this is all you get atm! ;} )  If your conserned about a race condition, cry for a internal gzdecode() function that actualy functions...

I spent about 3 hours straight debugging this problem.  I know the input data was valid, becuase I validated it with MD5() to compare to the md5's I had made of the input data before hand.  I'm not sure whats up with gzuncompress or gzinflate, but this works in its place . . .

Enjoy!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值