18.25. Reading and Writing Compressed Files
Problem
You want to read or write compressed files.
Solution
Use PHP’s
zlib extension to read or write
gzip
‘ed files. To read a
compressed file:
$zh = gzopen('file.gz','r') or die("can't open: $php_errormsg"); while ($line = gzgets($zh,1024)) { // $line is the next line of uncompressed data, up to 1024 bytes } gzclose($zh) or die("can't close: $php_errormsg");
Here’s how to write a compressed file:
$zh = gzopen('file.gz','w') or die("can't open: $php_errormsg"); if (-1 == gzwrite($zh,$s)) { die("can't write: $php_errormsg"); } gzclose($zh) or die("can't close: $php_errormsg");
Discussion
The zlib extension contains versions of many
file-access functions, such as fopen( )
,
fread( )
, and fwrite( )
(called
gzopen( )
, gzread( )
,
gzwrite( )
, etc.) that transparently compress data
when writing and uncompress data when reading. The compression
algorithm that zlib uses is compatible with the
gzip and gunzip utilities.
For example,
gzgets($zp,1024)
works like
fgets($fh,1024)
. It reads up to 1023 bytes,
stopping earlier if it reaches EOF or a newline. For gzgets( )
, this means 1023 uncompressed bytes.
However, gzseek( )
works differently than fseek( )
. It only supports seeking a specified number of bytes
from the beginning of the file stream (the
SEEK_SET
argument to fseek( )
). Seeking forward (from the current position) is only supported in files opened for writing (the file is padded with a sequence of compressed zeroes). Seeking backwards ...
Get PHP Cookbook now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.