php-doc-en/functions/zlib.xml
2001-12-12 20:47:43 +00:00

843 lines
26 KiB
XML

<?xml version="1.0" encoding="iso-8859-1"?>
<!-- $Revision: 1.21 $ -->
<reference id="ref.zlib">
<title>Zlib Compression Functions</title>
<titleabbrev>Zlib</titleabbrev>
<partintro>
<para>
This module uses the functions of <ulink
url="&url.zlib;">zlib</ulink> by Jean-loup Gailly and Mark Adler to
transparently read and write gzip (.gz) compressed files. You have
to use a zlib version >= 1.0.9 with this module.
</para>
<para>
This module contains versions of most of the <link
linkend="ref.filesystem">filesystem</link> functions which work
with gzip-compressed files (and uncompressed files, too, but not
with sockets).
</para>
<note>
<para>
The current CVS version 4.0.4-dev introduces 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 <function>fopen</function>.
</para>
<para>
This feature requires a C runtime library that provides the
<literal>fopencookie()</literal> function. To my current
knowledge the GNU libc is the only library that provides
this feature.
</para>
</note>
<sect1 id="zlib-example">
<title>Small code example</title>
<para>
Opens a temporary file and writes a test string to it, then it
prints out the content of this file twice.
</para>
<example>
<title>Small Zlib Example</title>
<programlisting role="php">
<![CDATA[
<?php
$filename = tempnam ('/tmp', 'zlibtest').'.gz';
print "<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
print gzread($zp, 3);
// output until end of the file and close it.
gzpassthru($zp);
print "\n";
// open file and print content (the 2nd time).
if (readgzfile($filename) != strlen($s)) {
echo "Error with zlib functions!";
}
unlink($filename);
print "</pre>\n</h1></body>\n</html>\n";
?>
]]>
</programlisting>
</example>
</sect1>
</partintro>
<refentry id="function.gzclose">
<refnamediv>
<refname>gzclose</refname>
<refpurpose>Close an open gz-file pointer</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<funcsynopsis>
<funcprototype>
<funcdef>int <function>gzclose</function></funcdef>
<paramdef>int <parameter>zp</parameter></paramdef>
</funcprototype>
</funcsynopsis>
<para>
The gz-file pointed to by zp is closed.
</para>
<para>
Returns &true; on success and &false; on failure.
</para>
<para>
The gz-file pointer must be valid, and must point to a file
successfully opened by <function>gzopen</function>.
</para>
</refsect1>
</refentry>
<refentry id="function.gzeof">
<refnamediv>
<refname>gzeof</refname>
<refpurpose>Test for end-of-file on a gz-file pointer</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<funcsynopsis>
<funcprototype>
<funcdef>int <function>gzeof</function></funcdef>
<paramdef>int <parameter>zp</parameter></paramdef>
</funcprototype>
</funcsynopsis>
<para>
Returns &true; if the gz-file pointer is at EOF or an error occurs;
otherwise returns &false;.
</para>
<para>
The gz-file pointer must be valid, and must point to a file
successfully opened by <function>gzopen</function>.
</para>
</refsect1>
</refentry>
<refentry id="function.gzfile">
<refnamediv>
<refname>gzfile</refname>
<refpurpose>Read entire gz-file into an array</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<funcsynopsis>
<funcprototype>
<funcdef>array <function>gzfile</function></funcdef>
<paramdef>string <parameter>filename</parameter></paramdef>
<paramdef>int
<parameter><optional>use_include_path</optional></parameter>
</paramdef>
</funcprototype>
</funcsynopsis>
<para>
Identical to <function>readgzfile</function>, except that
<function>gzfile</function> returns the file in an array.
</para>
<para>
You can use the optional second parameter and set it to "1", if
you want to search for the file in the <link
linkend="ini.include-path">include_path</link>, too.
</para>
<para>
See also <function>readgzfile</function>, and
<function>gzopen</function>.
</para>
</refsect1>
</refentry>
<refentry id="function.gzgetc">
<refnamediv>
<refname>gzgetc</refname>
<refpurpose>Get character from gz-file pointer</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<funcsynopsis>
<funcprototype>
<funcdef>string <function>gzgetc</function></funcdef>
<paramdef>int <parameter>zp</parameter></paramdef>
</funcprototype>
</funcsynopsis>
<para>
Returns a string containing a single (uncompressed) character
read from the file pointed to by zp. Returns &false; on EOF (as
does <function>gzeof</function>).
</para>
<para>
The gz-file pointer must be valid, and must point to a file
successfully opened by <function>gzopen</function>.
</para>
<para>
See also <function>gzopen</function>, and
<function>gzgets</function>.
</para>
</refsect1>
</refentry>
<refentry id="function.gzgets">
<refnamediv>
<refname>gzgets</refname>
<refpurpose>Get line from file pointer</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<funcsynopsis>
<funcprototype>
<funcdef>string <function>gzgets</function></funcdef>
<paramdef>int <parameter>zp</parameter></paramdef>
<paramdef>int <parameter>length</parameter></paramdef>
</funcprototype>
</funcsynopsis>
<para>
Returns a (uncompressed) string of up to length - 1 bytes read
from the file pointed to by fp. Reading ends when length - 1
bytes have been read, on a newline, or on EOF (whichever comes
first).
</para>
<para>
If an error occurs, returns &false;.
</para>
<para>
The file pointer must be valid, and must point to a file
successfully opened by <function>gzopen</function>.
</para>
<para>
See also <function>gzopen</function>,
<function>gzgetc</function>, and <function>fgets</function>.
</para>
</refsect1>
</refentry>
<refentry id="function.gzgetss">
<refnamediv>
<refname>gzgetss</refname>
<refpurpose>
Get line from gz-file pointer and strip HTML tags
</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<funcsynopsis>
<funcprototype>
<funcdef>string <function>gzgetss</function></funcdef>
<paramdef>int <parameter>zp</parameter></paramdef>
<paramdef>int <parameter>length</parameter></paramdef>
<paramdef>string
<parameter><optional>allowable_tags</optional></parameter>
</paramdef>
</funcprototype>
</funcsynopsis>
<para>
Identical to <function>gzgets</function>, except that
<function>gzgetss</function> attempts to strip any HTML and PHP
tags from the text it reads.
</para>
<para>
You can use the optional third parameter to specify tags which
should not be stripped.
<note>
<para>
<parameter>Allowable_tags</parameter> was added in PHP 3.0.13,
PHP4B3.
</para>
</note>
</para>
<para>
See also <function>gzgets</function>,
<function>gzopen</function>, and <function>strip_tags</function>.
</para>
</refsect1>
</refentry>
<refentry id="function.gzopen">
<refnamediv>
<refname>gzopen</refname>
<refpurpose>Open gz-file</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<funcsynopsis>
<funcprototype>
<funcdef>int <function>gzopen</function></funcdef>
<paramdef>string <parameter>filename</parameter></paramdef>
<paramdef>string <parameter>mode</parameter></paramdef>
<paramdef>int
<parameter><optional>use_include_path</optional></parameter>
</paramdef>
</funcprototype>
</funcsynopsis>
<para>
Opens a gzip (.gz) file for reading or writing. The mode
parameter is as in <function>fopen</function> ("rb" or "wb") but
can also include a compression level ("wb9") or a strategy: 'f'
for filtered data as in "wb6f", 'h' for Huffman only compression
as in "wb1h". (See the description of deflateInit2 in zlib.h for
more information about the strategy parameter.)
</para>
<para>
<function>gzopen</function> can be used to read a file which is
not in gzip format; in this case <function>gzread</function> will
directly read from the file without decompression.
</para>
<para>
<function>gzopen</function> returns a file pointer to the file
opened, after that, everything you read from this file descriptor
will be transparently decompressed and what you write gets
compressed.
</para>
<para>
If the open fails, the function returns &false;.
</para>
<para>
You can use the optional third parameter and set it to "1", if
you want to search for the file in the <link
linkend="ini.include-path">include_path</link>, too.
</para>
<para>
<example>
<title><function>gzopen</function> Example</title>
<programlisting role="php">
<![CDATA[
$fp = gzopen ("/tmp/file.gz", "r");
]]>
</programlisting>
</example>
</para>
<para>
See also <function>gzclose</function>.
</para>
</refsect1>
</refentry>
<refentry id="function.gzpassthru">
<refnamediv>
<refname>gzpassthru</refname>
<refpurpose>
Output all remaining data on a gz-file pointer
</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<funcsynopsis>
<funcprototype>
<funcdef>int <function>gzpassthru</function></funcdef>
<paramdef>int <parameter>zp</parameter></paramdef>
</funcprototype>
</funcsynopsis>
<para>
Reads to EOF on the given gz-file pointer and writes the
(uncompressed) results to standard output.
</para>
<para>
If an error occurs, returns &false;.
</para>
<para>
The file pointer must be valid, and must point to a file
successfully opened by <function>gzopen</function>.
</para>
<para>
The gz-file is closed when <function>gzpassthru</function> is
done reading it (leaving <parameter>zp</parameter> useless).
</para>
</refsect1>
</refentry>
<refentry id="function.gzputs">
<refnamediv>
<refname>gzputs</refname>
<refpurpose>Write to a gz-file pointer</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<funcsynopsis>
<funcprototype>
<funcdef>int <function>gzputs</function></funcdef>
<paramdef>int <parameter>zp</parameter></paramdef>
<paramdef>string <parameter>str</parameter></paramdef>
<paramdef>int
<parameter><optional>length</optional></parameter>
</paramdef>
</funcprototype>
</funcsynopsis>
<para>
<function>gzputs</function> is an alias to
<function>gzwrite</function>, and is identical in every way.
</para>
</refsect1>
</refentry>
<refentry id="function.gzread">
<refnamediv>
<refname>gzread</refname>
<refpurpose>Binary-safe gz-file read</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<funcsynopsis>
<funcprototype>
<funcdef>string <function>gzread</function></funcdef>
<paramdef>int <parameter>zp</parameter></paramdef>
<paramdef>int <parameter>length</parameter></paramdef>
</funcprototype>
</funcsynopsis>
<simpara>
<function>gzread</function> reads up to
<parameter>length</parameter> bytes from the gz-file pointer
referenced by <parameter>zp</parameter>. Reading stops when
<parameter>length</parameter> (uncompressed) bytes have been read
or EOF is reached, whichever comes first.
</simpara>
<para>
<informalexample>
<programlisting role="php">
<![CDATA[
// get contents of a gz-file into a string
$filename = "/usr/local/something.txt.gz";
$zd = gzopen ($filename, "r");
$contents = gzread ($zd, 10000);
gzclose ($zd);
]]>
</programlisting>
</informalexample>
</para>
<simpara>
See also <function>gzwrite</function>, <function>gzopen</function>,
<function>gzgets</function>, <function>gzgetss</function>,
<function>gzfile</function>, and <function>gzpassthru</function>.
</simpara>
</refsect1>
</refentry>
<refentry id="function.gzrewind">
<refnamediv>
<refname>gzrewind</refname>
<refpurpose>Rewind the position of a gz-file pointer</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<funcsynopsis>
<funcprototype>
<funcdef>int <function>gzrewind</function></funcdef>
<paramdef>int <parameter>zp</parameter></paramdef>
</funcprototype>
</funcsynopsis>
<para>
Sets the file position indicator for zp to the beginning of the
file stream.
</para>
<para>
If an error occurs, returns 0.
</para>
<para>
The file pointer must be valid, and must point to a file
successfully opened by <function>gzopen</function>.
</para>
<para>
See also <function>gzseek</function> and
<function>gztell</function>.
</para>
</refsect1>
</refentry>
<refentry id="function.gzseek">
<refnamediv>
<refname>gzseek</refname>
<refpurpose>Seek on a gz-file pointer</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<funcsynopsis>
<funcprototype>
<funcdef>int <function>gzseek</function></funcdef>
<paramdef>int <parameter>zp</parameter></paramdef>
<paramdef>int <parameter>offset</parameter></paramdef>
</funcprototype>
</funcsynopsis>
<para>
Sets the file position indicator for the file referenced by zp to
offset bytes into the file stream. Equivalent to calling (in C)
<literal>gzseek( zp, offset, SEEK_SET )</literal>.
</para>
<para>
If the file is opened for reading, this function is emulated but
can be extremely slow. If the file is opened for writing, only
forward seeks are supported; gzseek then compresses a sequence of
zeroes up to the new starting position.
</para>
<para>
Upon success, returns 0; otherwise, returns -1. Note that seeking
past EOF is not considered an error.
</para>
<para>
See also <function>gztell</function> and
<function>gzrewind</function>.
</para>
</refsect1>
</refentry>
<refentry id="function.gztell">
<refnamediv>
<refname>gztell</refname>
<refpurpose>Tell gz-file pointer read/write position</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<funcsynopsis>
<funcprototype>
<funcdef>int <function>gztell</function></funcdef>
<paramdef>int <parameter>zp</parameter></paramdef>
</funcprototype>
</funcsynopsis>
<para>
Returns the position of the file pointer referenced by
<parameter>zp</parameter>; i.e., its offset into the file
stream.
</para>
<para>
If an error occurs, returns &false;.
</para>
<para>
The file pointer must be valid, and must point to a file
successfully opened by <function>gzopen</function>.
</para>
<para>
See also <function>gzopen</function>, <function>gzseek</function>
and <function>gzrewind</function>.
</para>
</refsect1>
</refentry>
<refentry id="function.gzwrite">
<refnamediv>
<refname>gzwrite</refname>
<refpurpose>Binary-safe gz-file write</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<funcsynopsis>
<funcprototype>
<funcdef>int <function>gzwrite</function></funcdef>
<paramdef>int <parameter>zp</parameter></paramdef>
<paramdef>string <parameter>string</parameter></paramdef>
<paramdef>int
<parameter><optional>length</optional></parameter>
</paramdef>
</funcprototype>
</funcsynopsis>
<simpara>
<function>gzwrite</function> writes the contents of
<parameter>string</parameter> to the gz-file stream pointed to by
<parameter>zp</parameter>. If the <parameter>length</parameter>
argument is given, writing will stop after
<parameter>length</parameter> (uncompressed) bytes have been
written or the end of <parameter>string</parameter> is reached,
whichever comes first.
</simpara>
<simpara>
Note that if the <parameter>length</parameter> argument is given,
then the <link
linkend="ini.magic-quotes-runtime">magic_quotes_runtime</link>
configuration option will be ignored and no slashes will be
stripped from <parameter>string</parameter>.
</simpara>
<simpara>
See also <function>gzread</function>, <function>gzopen</function>,
and <function>gzputs</function>.
</simpara>
</refsect1>
</refentry>
<refentry id="function.readgzfile">
<refnamediv>
<refname>readgzfile</refname>
<refpurpose>Output a gz-file</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<funcsynopsis>
<funcprototype>
<funcdef>int <function>readgzfile</function></funcdef>
<paramdef>string <parameter>filename</parameter></paramdef>
<paramdef>int
<parameter><optional>use_include_path</optional></parameter>
</paramdef>
</funcprototype>
</funcsynopsis>
<para>
Reads a file, decompresses it and writes it to standard
output.
</para>
<para>
<function>readgzfile</function> can be used to read a file which
is not in gzip format; in this case
<function>readgzfile</function> will directly read from the file
without decompression.
</para>
<para>
Returns the number of (uncompressed) bytes read from the file. If
an error occurs, &false; is returned and unless the function was
called as <literal>@readgzfile</literal>, an error message is
printed.
</para>
<para>
The file <parameter>filename</parameter> will be opened from the
filesystem and its contents written to standard output.
</para>
<para>
You can use the optional second parameter and set it to "1", if
you want to search for the file in the <link
linkend="ini.include-path">include_path</link>, too.
</para>
<para>
See also <function>gzpassthru</function>,
<function>gzfile</function>, and <function>gzopen</function>.
</para>
</refsect1>
</refentry>
<refentry id="function.gzcompress">
<refnamediv>
<refname>gzcompress</refname>
<refpurpose>Compress a string</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<funcsynopsis>
<funcprototype>
<funcdef>string <function>gzcompress</function></funcdef>
<paramdef>string <parameter>data</parameter></paramdef>
<paramdef>int
<parameter><optional>level</optional></parameter>
</paramdef>
</funcprototype>
</funcsynopsis>
<para>
This function returns a compressed version of the input
<parameter>data</parameter> using the ZLIB data format,
or &false; if an error is encountered. The optional parameter
<parameter>level</parameter> can be given as 0 for no
compression up to 9 for maximum compression.
</para>
<para>
For details on the ZLIB compression algorithm see the document
"<ulink url="&url.rfc1950;">ZLIB Compressed Data Format
Specification version 3.3</ulink>" (RFC 1950).
</para>
<note>
<para>
This is <emphasis>not</emphasis> the same as gzip compression,
which includes some header data. See <function>gzencode</function>
for gzip compression.
</para>
</note>
<para>
See also <function>gzdeflate</function>,
<function>gzinflate</function>,
<function>gzuncompress</function>,
<function>gzencode</function>.
</para>
</refsect1>
</refentry>
<refentry id="function.gzuncompress">
<refnamediv>
<refname>gzuncompress</refname>
<refpurpose>Uncompress a deflated string</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<funcsynopsis>
<funcprototype>
<funcdef>string <function>gzuncompress</function></funcdef>
<paramdef>string <parameter>data</parameter></paramdef>
<paramdef>int
<parameter><optional>length</optional></parameter>
</paramdef>
</funcprototype>
</funcsynopsis>
<para>
This function takes <parameter>data</parameter> compressed by
<function>gzcompress</function> and returns the original
uncompressed data or &false; on error. The function will return an
error if the uncompressed data is more than 256 times the length
of the compressed input <parameter>data</parameter> or more than
the optional parameter <parameter>length</parameter>.
</para>
<para>
See also <function>gzdeflate</function>,
<function>gzinflate</function>,
<function>gzcompress</function>,
<function>gzencode</function>.
</para>
</refsect1>
</refentry>
<refentry id="function.gzdeflate">
<refnamediv>
<refname>gzdeflate</refname>
<refpurpose>Deflate a string</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<funcsynopsis>
<funcprototype>
<funcdef>string <function>gzdeflate</function></funcdef>
<paramdef>string <parameter>data</parameter></paramdef>
<paramdef>int
<parameter><optional>level</optional></parameter>
</paramdef>
</funcprototype>
</funcsynopsis>
<para>
This function returns a compressed version of the input
<parameter>data</parameter> using the DEFLATE data format,
or &false; if an error is encountered. The optional parameter
<parameter>level</parameter> can be given as 0 for no
compression up to 9 for maximum compression.
</para>
<para>
For details on the DEFLATE compression algorithm see the document
"<ulink url="&url.rfc1951;">DEFLATE Compressed Data Format
Specification version 1.3</ulink>" (RFC 1951).
</para>
<para>
See also
<function>gzinflate</function>,
<function>gzcompress</function>,
<function>gzuncompress</function>,
<function>gzencode</function>.
</para>
</refsect1>
</refentry>
<refentry id="function.gzinflate">
<refnamediv>
<refname>gzinflate</refname>
<refpurpose>Inflate a deflated string</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<funcsynopsis>
<funcprototype>
<funcdef>string <function>gzinflate</function></funcdef>
<paramdef>string <parameter>data</parameter></paramdef>
<paramdef>int
<parameter><optional>length</optional></parameter>
</paramdef>
</funcprototype>
</funcsynopsis>
<para>
This function takes <parameter>data</parameter> compressed by
<function>gzdeflate</function> and returns the original
uncompressed data or &false; on error. The function will return an
error if the uncompressed data is more than 256 times the length
of the compressed input <parameter>data</parameter> or more than
the optional parameter <parameter>length</parameter>.
</para>
<para>
See also <function>gzcompress</function>.
<function>gzuncompress</function>,
<function>gzdeflate</function>,
<function>gzencode</function>.
</para>
</refsect1>
</refentry>
<refentry id="function.gzencode">
<refnamediv>
<refname>gzencode</refname>
<refpurpose>Create a gzip compressed string</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<funcsynopsis>
<funcprototype>
<funcdef>string <function>gzencode</function></funcdef>
<paramdef>string <parameter>data</parameter></paramdef>
<paramdef>int
<parameter><optional>level</optional></parameter>
</paramdef>
</funcprototype>
</funcsynopsis>
<para>
This function returns a compressed version of the input
<parameter>data</parameter> compatible with the output of
the <command>gzip</command> program,
or &false; if an error is encountered. The optional parameter
<parameter>level</parameter> can be given as 0 for no
compression up to 9 for maximum compression, if not given
the default compression level will be 1.
</para>
<para>
The resulting data contains the appropriate headers and data
structure to make a standard .gz file, e.g.:
<example>
<title>Creating a gzip file</title>
<programlisting role="php">
<![CDATA[
<?php
$data = implode("", "bigfile.txt");
$gzdata = gzencode($data, 9);
$fp = fopen("bigfile.txt.gz", "w");
fwrite($fp, $gzdata);
fclose($fp);
?>
]]>
</programlisting>
</example>
</para>
<para>
For more information on the GZIP file format, see the document:
<ulink url="&url.rfc1952;">GZIP file format specification
version 4.3</ulink> (RFC 1952).
</para>
<para>
See also <function>gzcompress</function>.
<function>gzuncompress</function>,
<function>gzdeflate</function>,
<function>gzinflate</function>.
</para>
</refsect1>
</refentry>
</reference>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->