useful recursive PHP functions

recursively ...

PHP Manual for

CXXIII. Zlib Compression Functions

Introduction

This module enables you to transparently read and write gzip (.gz) compressed files, through versions of most of the filesystem functions which work with gzip-compressed files (and uncompressed files, too, but not with sockets).

Note: Version 4.0.4 introduced a fopen-wrapper for .gz-files, so that you can use a special 'zlib:' URL to access compressed files transparently using the normal f*() file access functions if you prepend the filename or path with a 'zlib:' prefix when calling fopen().

In version 4.3.0, this special prefix has been changed to 'zlib://' to prevent ambiguities with filenames containing ':'.

This feature requires a C runtime library that provides the fopencookie() function. To my current knowledge the GNU libc is the only library that provides this feature.

Requirements

This module uses the functions of zlib by Jean-loup Gailly and Mark Adler. You have to use a zlib version >= 1.0.9 with this module.

Installation

Zlib support in PHP is not enabled by default. You will need to configure PHP --with-zlib[=DIR]

The windows version of PHP has built in support for this extension. You do not need to load any additional extension in order to use these functions.

Note: Builtin support for zlib on Windows is available with PHP 4.3.0.

Runtime Configuration

The behaviour of these functions is affected by settings in php.ini.

The zlib extension offers the option to transparently compress your pages on-the-fly, if the requesting browser supports this. Therefore there are three options in the configuration file php.ini.

Table 1. Zlib Configuration Options

NameDefaultChangeablezlib.output_compression"Off"PHP_INI_ALLzlib.output_compression_level"-1"PHP_INI_ALLzlib.output_handler""PHP_INI_ALL
For further details and definition of the PHP_INI_* constants see ini_set().

Here's a short explanation of the configuration directives.

zlib.output_compression boolean/ integer

Whether to transparently compress pages. If this option is set to "On" in php.ini or the Apache configuration, pages are compressed if the browser sends an "Accept-Encoding: gzip" or "deflate" header. "Content-Encoding: gzip" (respectively "deflate") and "Vary: Accept-Encoding" headers are added to the output.

You can use ini_set() to disable this in your script if the headers aren't already sent. If you output a "Content-Type: image/" header the compression is disabled, too (in order to circumvent a Netscape bug). You can reenable it, if you add "ini_set('zlib.output_compression', 'On')" after the header call which added the image content-type.

This option also accepts integer values instead of boolean "On"/"Off", using this you can set the output buffer size (default is 4KB).

Note: output_handler must be empty if this is set 'On' ! Instead you must use zlib.output_handler.

zlib.output_compression_level integer

Compression level used for transparent output compression.

zlib.output_handler string

You cannot specify additional output handlers if zlib.output_compression is activated here. This setting does the same as output_handler but in a different order.

Resource Types

This extension has no resource types defined.

Predefined Constants

The constants below are defined by this extension, and will only be available when the extension has either been compiled into PHP or dynamically loaded at runtime.

FORCE_GZIP ( integer)

FORCE_DEFLATE ( integer)

Examples

This example opens a temporary file and writes a test string to it, then it prints out the content of this file twice.

Example 1. Small Zlib Example

<?php

$filename
= tempnam('/tmp', 'zlibtest') . '.gz';
echo
"<html>\n<head></head>\n<body>\n<pre>\n";
$s = "Only a test, test, test, test, test, test, test, test!\n";

// open file for writing with maximum compression
$zp = gzopen($filename, "w9");

// write string to file
gzwrite($zp, $s);

// close file
gzclose($zp);

// open file for reading
$zp = gzopen($filename, "r");

// read 3 char
echo gzread($zp, 3);

// output until end of the file and close it.
gzpassthru($zp);
gzclose($zp);

echo
"\n";

// open file and print content (the 2nd time).
if (readgzfile($filename) != strlen($s)) {
        echo
"Error with zlib functions!";
}
unlink($filename);
echo
"</pre>\n</body>\n</html>\n";

?>
Table of Contents gzclose -- Close an open gz-file pointergzcompress -- Compress a stringgzdeflate -- Deflate a stringgzencode -- Create a gzip compressed stringgzeof -- Test for end-of-file on a gz-file pointergzfile -- Read entire gz-file into an arraygzgetc -- Get character from gz-file pointergzgets -- Get line from file pointergzgetss --  Get line from gz-file pointer and strip HTML tagsgzinflate -- Inflate a deflated stringgzopen -- Open gz-filegzpassthru --  Output all remaining data on a gz-file pointergzputs -- Alias of gzwrite() gzread -- Binary-safe gz-file readgzrewind -- Rewind the position of a gz-file pointergzseek -- Seek on a gz-file pointergztell -- Tell gz-file pointer read/write positiongzuncompress -- Uncompress a deflated stringgzwrite -- Binary-safe gz-file writereadgzfile -- Output a gz-filezlib_get_coding_type -- Returns the coding type used for output compression

© 2012 lixlpixel