Руководство по PHP
Пред. |  | След.

# CLXXXIV. Функции сжатия Zlib

# Введение

Этот модуль позволяет работать со сжатыми файлами gzip (.gz) стандартным методом, наподобие функций файловой системы (исключение составляют только сокеты).

> Замечание: В версии 4.0.4 появился новый протокол 'zlib:' для доступа прямого к сжатым файлам через обычные функции f*() (для этого нужно было добавить 'zlib:' в начало пути к файлу при вызове fopen().

> В версии 4.3.0, префикс изменился на 'zlib://' для предотвращения многозначности в случае файлов, содержащих ':' в имени.

> Требуется библиотека времени выполнения C, предоставляющая функцию `fopencookie()`. Насколько нам известно, такой библиотекой является только GNU libc.

# Требования

Этот модуль использует библиотеку zlib, написанную Jean-loup Gailly и Mark Adler. Используйте версию zlib >= 1.0.9 с этим модулем.

# Установка

Поддержка Zlib при стандартной сборке PHP отсутствует. Чтобы изменить это, добавьте ключ `--with-zlib[=DIR]` при запуске сценария ./configure

Версия `PHP` для Windows имеет встроенную поддержку данного расширения. Это означает, что для использования данных функций не требуется загрузка никаких дополнительных расширений.

> Замечание: Т.к. библиотека zlib отсутствует в Windows, она встроена в PHP начиная с версии 4.3.0.

# Настройка во время выполнения

Поведение этих функций зависит от установок в `php.ini`.

Модуль zlib предоставляет возможность сжатия передаваемых страниц (в т.ч. динамических) на лету, если браузер это поддерживает. За сжатие отвечают три параметра в конфигурационном файле `php.ini`.

Таблица 1. Конфигурационные параметры, касающиеся Zlib

Параметр | Значение по умолчанию | Переменная окружения
--- | --- | ---
zlib.output_compression | "Off" | PHP_INI_ALL
zlib.output_compression_level | "-1" | PHP_INI_ALL
zlib.output_handler | "" | PHP_INI_ALL

Для подробностей и определения переменных PHP_INI_* см. ini_set().

Краткое разъяснение конфигурационных директив.

`zlib.output_compression` boolean/integer

  Сжимать ли страницы. Если значение равно "On" в `php.ini` или в настройках Apache, страницы будут сжиматься если обозреватель посылает заголовок "Accept-Encoding: gzip" или "deflate". при этом в вывод будут добавлены заголовки "Content-Encoding: gzip" (соответственно "deflate") и "Vary: Accept-Encoding".

  Аргументы также могут быть целого типа, так вы можете установить размер буфера (дискретизации) вывода (по умолчанию 4 Кб).

  > Замечание: output_handler должен быть пустым, если выбрано значение 'On'! Вместо него следует использовать zlib.output_handler.

`zlib.output_compression_level` integer

  Уровень сжатия.

`zlib.output_handler` string

  Если zlib.output_compression активировано здесь, указывать дополнительные обработчики вывода (output handlers) нельзя. Этот параметр делает то же, что и output_handler, но в другом порядке.

# Типы ресурсов

Данное расширение не определяет никакие типы ресурсов.

# Предопределенные константы

Перечисленные ниже константы определены данным расширением и могут быть доступны только в том случае, если PHP был собран с поддержкой этого расширения или же в том случае, если данное расширение подгружается во время выполнения.

`FORCE_GZIP` (integer)

`FORCE_DEFLATE` (integer)

# Примеры

Здесь открывается временный файл, в него записывается строка, затем дважды печатается содержимое этого файла.

Пример 1. Небольшой пример использования Zlib

`<?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";
// открыть файл для записи с максимальным сжатием
$zp = gzopen($filename, "w9");
// записать строку в файл
gzwrite($zp, $s);
// акрыть файл
gzclose($zp);
// открыть файл для чтения
$zp = gzopen($filename, "r");
// прочитать три символа
echo gzread($zp, 3);
// выводить до конца файла, затем закрыть его
gzpassthru($zp);
gzclose($zp);
echo "\n";
// открыть файл и напечатать его содержимое (во второй раз)
if (readgzfile($filename) != strlen($s)) {
echo "Error with zlib functions!";
}
unlink($filename);
echo "</pre>\n</body>\n</html>\n";
?>`

Пред. | Начало | След.
ZipArchive::unchangeName | Уровень выше | gzclose