Portrety Uliczne Nieznajomych - zobacz wyjątkową galerię portretów z warszawskich ulic
ZALOGUJ SIĘ
login:
hasło:
przypomnij hasło
załóż konto użytkownika
(i zobacz kilka porad gratis)
   
WYSZUKIWARKA I DZIAŁY
całe porady  tytuły
zaznacz działy do przeszukania
(brak wyboru = wszystkie działy)
PHP
MySQL >
PostgreSQL
SQLite
Perl
Java
XML
XSLT
XPath
WML
SVG
RegExp
Wyszukiwarki
Ochrona
VBScript
Google Plus
XHTML/CSS
JavaScript
Grafika
Flash
Photoshop
Windows
Linux
Bash
Apache
Procmail
E-biznes
Explorer
Opera
Firefox
Inne porady
   
KURSY, DOKUMENTACJE
Własne:
XHTML/CSS
JavaScript
ActionScript
WML, RSS, SSI
Pozostałe:
PHP
MySQL
Java API
więcej...
   
użytkowników online: 53
W CZYM MOGĘ POMÓC?


   
OPINIE UŻYTKOWNIKÓW
Z mojej strony serwisowi należy się bardzo mocna pochwała. Nawet późna pora zgłoszenia problemu (23.00) nie przeszkodziła Darkowi w jego rozwiązaniu. Do tego poziom odpisywania na maile jest bardzo wysoki... wszystko wykłada jak cierpliwy nauczyciel. Śmiało mogę przyznać, że zamieszczone na stronach porady są rzeczowo opisane - a nie jak to bywa w innych serwisach mamy sam kod i nic poza tym! Jeszcze raz wielkie dzięki!

Damian Jarosz
Adminer.pl

   
GALERIA FOTOGRAFII
   
PODRĘCZNIK PHP 5.x, 4.x, 3.x - częściowo spolszczony / źródło: www.php.net

[Spis] [A] [B] [C] [D] [E] [F] [G] [H] [I] [J] [K] [L] [M] [N] [O] [P] [Q] [R] [S] [T] [U] [V] [X] [W] [Z]

gzencode

(PHP 4 >= 4.0.4, PHP 5)

gzencode -- Create a gzip compressed string

Opis

string gzencode ( string data [, int level [, int encoding_mode]] )

This function returns a compressed version of the input data compatible with the output of the gzip program.

For more information on the GZIP file format, see the document: GZIP file format specification version 4.3 (RFC 1952).

Parametry

data

The data to encode.

level

The level of compression. Can be given as 0 for no compression up to 9 for maximum compression. If not given, the default compression level will be the default compression level of the zlib library.

encoding_mode

The encoding mode. Can be FORCE_GZIP (the default) or FORCE_DEFLATE.

If you use FORCE_DEFLATE, you get a standard zlib deflated string (inclusive zlib headers) after the gzip file header but without the trailing crc32 checksum.

Zwracane wartości

The encoded string, or FALSE if an error occurred.

Przykłady

The resulting data contains the appropriate headers and data structure to make a standard .gz file, e.g.:

Przykład 1. Creating a gzip file

<?php
$data
= implode("", file("bigfile.txt"));
$gzdata = gzencode($data, 9);
$fp = fopen("bigfile.txt.gz", "w");
fwrite($fp, $gzdata);
fclose($fp);
?>

Rejestr zmian

WersjaOpis
4.2 level was added. gzencode() only had the data and the optional encoding_mode parameters before.




User Contributed Notes

StoneCypher ( http://sc.tri-bit.com/ )
25-Feb-2005 09:19

The example in the notes would be more obvious written as:

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


Aaron G.
07-Aug-2004 03:29

<?php

function gzdecode($data) {
 
$len = strlen($data);
  if (
$len < 18 || strcmp(substr($data,0,2),"\x1f\x8b")) {
   return
null// Not GZIP format (See RFC 1952)
 
}
 
$method = ord(substr($data,2,1));  // Compression method
 
$flags  = ord(substr($data,3,1));  // Flags
 
if ($flags & 31 != $flags) {
  
// Reserved bits are set -- NOT ALLOWED by RFC 1952
  
return null;
  }
 
// NOTE: $mtime may be negative (PHP integer limitations)
 
$mtime = unpack("V", substr($data,4,4));
 
$mtime = $mtime[1];
 
$xfl  = substr($data,8,1);
 
$os    = substr($data,8,1);
 
$headerlen = 10;
 
$extralen  = 0;
 
$extra    = "";
  if (
$flags & 4) {
  
// 2-byte length prefixed EXTRA data in header
  
if ($len - $headerlen - 2 < 8) {
     return
false;    // Invalid format
  
}
  
$extralen = unpack("v",substr($data,8,2));
  
$extralen = $extralen[1];
   if (
$len - $headerlen - 2 - $extralen < 8) {
     return
false;    // Invalid format
  
}
  
$extra = substr($data,10,$extralen);
  
$headerlen += 2 + $extralen;
  }

 
$filenamelen = 0;
 
$filename = "";
  if (
$flags & 8) {
  
// C-style string file NAME data in header
  
if ($len - $headerlen - 1 < 8) {
     return
false;    // Invalid format
  
}
  
$filenamelen = strpos(substr($data,8+$extralen),chr(0));
   if (
$filenamelen === false || $len - $headerlen - $filenamelen - 1 < 8) {
     return
false;    // Invalid format
  
}
  
$filename = substr($data,$headerlen,$filenamelen);
  
$headerlen += $filenamelen + 1;
  }

 
$commentlen = 0;
 
$comment = "";
  if (
$flags & 16) {
  
// C-style string COMMENT data in header
  
if ($len - $headerlen - 1 < 8) {
     return
false;    // Invalid format
  
}
  
$commentlen = strpos(substr($data,8+$extralen+$filenamelen),chr(0));
   if (
$commentlen === false || $len - $headerlen - $commentlen - 1 < 8) {
     return
false;    // Invalid header format
  
}
  
$comment = substr($data,$headerlen,$commentlen);
  
$headerlen += $commentlen + 1;
  }

 
$headercrc = "";
  if (
$flags & 1) {
  
// 2-bytes (lowest order) of CRC32 on header present
  
if ($len - $headerlen - 2 < 8) {
     return
false;    // Invalid format
  
}
  
$calccrc = crc32(substr($data,0,$headerlen)) & 0xffff;
  
$headercrc = unpack("v", substr($data,$headerlen,2));
  
$headercrc = $headercrc[1];
   if (
$headercrc != $calccrc) {
     return
false;    // Bad header CRC
  
}
  
$headerlen += 2;
  }

 
// GZIP FOOTER - These be negative due to PHP's limitations
 
$datacrc = unpack("V",substr($data,-8,4));
 
$datacrc = $datacrc[1];
 
$isize = unpack("V",substr($data,-4));
 
$isize = $isize[1];

 
// Perform the decompression:
 
$bodylen = $len-$headerlen-8;
  if (
$bodylen < 1) {
  
// This should never happen - IMPLEMENTATION BUG!
  
return null;
  }
 
$body = substr($data,$headerlen,$bodylen);
 
$data = "";
  if (
$bodylen > 0) {
   switch (
$method) {
     case
8:
      
// Currently the only supported compression method:
      
$data = gzinflate($body);
       break;
     default:
      
// Unknown compression method
      
return false;
   }
  } else {
  
// I'm not sure if zero-byte body content is allowed.
   // Allow it for now...  Do nothing...
 
}

 
// Verifiy decompressed size and CRC32:
  // NOTE: This may fail with large data sizes depending on how
  //      PHP's integer limitations affect strlen() since $isize
  //      may be negative for large sizes.
 
if ($isize != strlen($data) || crc32($data) != $datacrc) {
  
// Bad format!  Length or CRC doesn't match!
  
return false;
  }
  return
$data;
}

?>


sjab-x at bergenbosgroep dot nl
26-Dec-2002 03:06

If you want a binary proof function use fread instead of implode.

function create_gzip_file($src_file, $dest_file) {

 $fd = fopen ($src_file, "r");
 $data = fread ($fd, filesize ($src_file));
 fclose ($fd);

 $gz_data = gzencode($data);

 $fp = fopen($dest_file, "w+");
 fwrite($fp, $gz_data);
 fclose($fp);

}

This works fine for me :)


tychay at alumni dot caltech dot edu
03-Apr-2002 12:53

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


henryk at ploetzli dot ch
15-Feb-2002 03:28

Well, I was looking for a gzdecode too and didn't consider the temporary file example above to be very elegant.
However, as is noted in the very first comment: gzencode() only adds a  10 byte header.

I don't quite know what this header is supposed to be used for, but gzinflate() certainly doesn't like it, so I stripped it off:

function my_gzdecode($string) {
  $string = substr($string, 10);
  return gzinflate($string);
 }

That's useful to read HTTP-Connections that were compressed by mod_gzip.
--
Henryk Pl

 

 
  © 1996-2012 & Reporter.plmiejscao serwisieabonamentwarunki korzystaniaRSSkontakt