9.2. Функции, работающие со сжатыми файлами
Функции, описанные в этом разделе, используют одну из двух библиотек сжатия: zlib или bzip2. Библиотека zlib используется и таким механизмом сжатия GNU, как gzip, созданным Жаном-Лу Гайлом (Jean-loup Gaill) и Марком Адлером (Mark Adler). Об этой библиотеке можно узнать подробнее на Web-странице библиотеки zlib по адресу <http://www.cdrom.com/pub/infozip/zlib/>. Библиотека bzip2 была разработана Джулиан Сеуорд (Julian Seward) и работает с утилитой командной строки bzip2. Подробнее о ней можно узнать на Web-странице bzip2 по адресу <http://sources.redhat.com/bzip2/>. 
Большинство функций для операций чтения/записи в файлы продублированы здесь и функционируют подобным образом. Одним из различий является недостаток поддержки спецификации файлов с использованием протокола HTTP или FTP.
Функции, предназначенные для упаковки и распаковки строк, работающие с этими двумя библиотеками, описываются в главе 12, "Кодирование и декодирование".
boolean bzclose(resource file)
Эта функция закрывает поток, открытый функцией bzopen.
integer bzerrno(resource file)
Эта функция возвращает номер последней ошибки для заданного потока, открытого функцией bzopen.
array bzerror(resource file)
Функция bzerror возвращает массив, состоящий из двух элементов, с описанием последней ошибки для заданного потока, открытого с помощью bzopen. Элемент errno содержит номер ошибки, а элемент errstr - ее описание.
string bzerrstr(resource file)
Эта функция возвращает описание последней ошибки для потока, открытого функцией bzopen.
boolean bzflush(resource file)
Функция bzflush сбрасывает содержимое буфера записи в поток, открытый с помощью функции bzopen.
resource bzopen(string filename, string mode)
Функция bzopen открывает поток на файл, сжатый с помощью функции bzip2. Аргумент mode полностью соответствует спецификации, используемой функцией fopen, приведенной в табл. 9.4. Потоку возвращается дескриптор ресурса, а в случае ошибки - значение FALSE.
string bzread(resource file, integer length)
Функция bzread осуществляет чтение из сжатого файла, открытого с помощью функции bzopen. Необязательный аргумент length устанавливает максимальную длину возвращаемой строки, которая по умолчанию равна 1024 символам.
integer bzwrite(resource file, string data, integer length)
Функция bzwrite (листинг 9.49) записывает строку в дескриптор файла, открытого с помощью функции bzopen. Необязательный аргумент length ограничивает длину записанной строки до сжатия до определенной длины.

| Листинг 9.49. Функция bzwrite_
<?php
$filename = '/tmp/test.bz2'; // открыть файл
if(!($bz = bzopen($filename, 'w'))) 
{
print('Нельзя открыть файл.'); exit();
}
// записать текст for($n=0; $n < 10; $n++)
{
bzwrite($bz, "Проверить строку $nn");
}
// закрыть файл bzclose($bz);
// открыть повторно в режиме чтения if(!($bz = bzopen($filename, 'r')))
{
print('Файл открыть невозможно.'); exit();
}
// распечатать все строки
while(!feof($bz))
{
print(nl2br(bzread($bz)));
}
// закрыть файл bzclose($bz);

boolean gzclose(resource file)
Функция gzclose закрывает файл, открытый с помощью функции gzopen. Значение TRUE возвращается в случае успешного закрытия файла. Значение FALSE возвращается, когда файл не может быть закрыт.