Работа с архивами Zlib
Файлы и сети
🕛 01.11.2006, 13:27
Модуль zlib (http://www.info-zip.org/pub/infozip/zlib/), разработанный Jean-loup Gailly и Mark Adler, позволяет производить операции файлового ввода-вывода в файлах, архивированных (сжатых) методом gzip (.gz). В этом модуле РНР используется библиотека zlib версии 1.0.9. Модуль содержит большую часть родственных функций файловой системы (с префиксом gz), которые могут работать как с обычными, так и с архивными файлами (но не с секстами). Для текущей версии РНР поддержка этих функций должна быть косвенно включена в обычные функции файловой системы. Таким образом, при подключении модуля zlib файловые функции (с помощью метода, называемого fopen-vvrapper для .gz-файлов) могут также просто работать с архивными файлами, как и с FTP-файлами. Для этого в строке имени файла (пути к нему) нужно указывать специальный префикс 'zlib:', подобно указанию URL для доступа к FTP-файлам.
<?php
$filename='C:\ZZZ.gz1.
// открыть файл для записи с
максимальным сжатием
$zp - gzopen($filename. "w9"):
// записать строку в файл
$s =- "Only a test. test. test. test,
test test. test. test!\n"
g?wnte($zp. $s);
gzclose(SzD). // закрыть файл
$zp = gzopen($filename. "г").
print gzread($zp. 3):// прочитать
З символа gzpassthru($zp):
// выводить содержимое до
конца файла и закрыть его
// еще раз вывести содержимое файла
if (rea>1gzfile($filename) != strlen($s))
{ echo "Error with zlib functions!".} ?>
gzcompress
Сжатие строки методом Gz
string gzcompress (string data [, int level])
Аргументом level можно указать степень сжатия (от минимального О до 9).
См. также gzuncompress().
gzuncompress
Распаковка gz-сжатой строки
string gzuncompress (string data [, int length])
Возвращает оригинальную строку данных, сжатую ранее функцией gzcompress(), или FALSE в случае ошибки. Ошибка может возникнуть (помимо случая поврежденных данных), если при распаковке размер строки увеличивается более чем в 256 раз или становится больше, чем указано в необязательном аргументе length.
См. также gzcompress().
readgzfile
Вывод gz-файла
int readgzfile (string filename [, int use_include_path])
Читает файл filename, распаковывает его и выводит (в стандартный поток вывода). Функция может также работать с обычными файлами (тогда распаковка не производится).
Возвращает число выведенных байтов или FALSE - в случае ошибки. В случае ошибки также выводится сообщение об ошибке (если только функция не была вызвана как Preadgzfile).
Необязательный аргумент include_path можно использовать (если его значение равно 1), чтобы поиск файла также производился в установленных параметром include_path каталогах по умолчанию.
См. также: gzpassthru(), gzfile() и gzopen().
gzfile
Чтение всего gz-файла в массив
array gzfile (string filename [, Int use_include_path])
Функция подобна readgzfi'le(), но распакованные данные не выводятся, а возвращаются в виде массива.
См. также: readgzfile() и gzopen().
gzopen
Открытие gz-файла
int gzopen (string filename, string mode [, int use_include_path])
Функция сходна с fopen(), но она работает с файлами gzip (.gz). Аргумент,mode может быть таким же, как в функции fopen() ("rb" или "wb"), но может также включать цифру, указывающую на степень используемого сжатия (например: "wb9-") и метод: f для фильтруемых данных (например: "wb6f"), h -для компрессии Хаффмана ("wblh"). Описание параметра deflatelnit2 смотрите в файле zlib.h.
Функция также может использоваться для открытия обычного файла; в таком случае gzread() будет читать данные файла без декомпрессии.
Функция возвращает дескриптор открытого файла (или FALSE в случае ошибки), используя который, можно осуществлять операции ввода-вывода, и сжатие и распаковка данных будут осуществляться автоматически.
Необязательный аргумент include_path можно использовать (если его значение равно 1), чтобы поиск файла также производился в установленных параметром include_path каталогах по умолчанию.
$fp = gzopen ("/tmp/file gz". "r").
См. также gzclose().
gzclose
Закрытие gz-файла int gzclose (int zp)
Закрывает gz-файл, дескриптор которого zp должен был быть ранее успешно возвращен функцией gzopen(). Возвращает TRUE или FALSE - при ошибке.
gzread
Чтение последовательности символов из gz-файла
string gzread (int zp, int length)
Число читаемых байтов указывается аргументом length. Дескриптор zp должен быть ранее успешно возвращен функцией gzopen(). Чтение прекращается, когда будет прочитано length распакованных байтов или если будет обнаружен символ конца файла EOF.
Sfilename =
"/usr/local/something txt.gz": Szd =
gzopen (Sfilename. "r"). Scontents =
gzread (Szd. 10000). gzclose (Szd);
См. также: gzwrite(), gzopen(), gzgets(), gzgetss(), gzfile() и gzpassthru().
gzgetc
Чтение символа из gz-файла
string gzgetc (int zp)
Возвращает строку, содержащую единственный (распакованный) символ файла, имеющего дескриптор zp. Если встречается символ EOF, то возвращается FALSE (так же как функцией gzeof()).
Дескриптор zp должен быть ранее успешно возвращен функцией gzopen().
См. также: gzopen() и gzgets().
gzgets
Чтение строки
string gzgets (int zp, int length)
Возвращает распакованную строку gz-файла, имеющего дескриптор zp.
Чтение прекращается, когда будет прочитано length-1 распакованных байтов, если будет обнаружен символ конца файла EOF или встретится символ конца строки.
При ошибке возвращает FALSE.
Дескриптор zp должен быть ранее успешно возвращен функцией gzopen().
См. также: gzopen(), gzgetc() и fgets().
gzgetss
Аналог gzgets, удаляющий теги HTML и PHP из текста
string gzgetss (int zp, int length [, string allowablejtags])
Необязательным аргументом можно указать, какие теги не следует удалять.
См. также: gzgets(), gzopen(), strip_tags().
gzpassthru
Вывод всего содержимого gz-файла до его конца
int gzpassthru (int zp)
Читает (распаковывая) gz-файл с дескриптором zp от текущей позиции курсора и до конца (позиции, в которой находится символ EOF) и затем выводит полученное содержимое в стандартный поток вывода. При ошибке возвращает FALSE.
Дескриптор zp должен быть ранее успешно возвращен функцией gzopen().
После вывода файл закрывается (функция gzclose() вызывается неявно).
gzwrite
Запись строки в gz-файл
int gzwrite (int zp, string string [, int length])
Записывает содержимое строки string (упаковывая) в gz-файл с дескриптором zp. Если указан аргумент length, то запись прекращается после того, как будет записано length (неупакованных) байтов (если размер строки более length байтов).
Заметьте, что параметр magic_quotes_runtime (если он разрешен) игнорируется и слеши не удаляются из строки string, если указывается аргумент length.
См. также: gzread(), gzopen() и gzputs().
gzputs
Синоним функции gzwrite
int gzputs (int zp, string str [, int length])
gzeof
Проверка наличия символа конца файла
int gzeof (int zp)
Возвращает TRUE, если текущий символ gz-файла - это EOF или если при операции чтения произошла ошибка; иначе возвращает FALSE.
Дескриптор zp должен был быть ранее успешно возвращен функцией gzopen().
gztell
Определение позиции курсора gz-файла int gztell (int zp)
Возвращает ту позицию (в байтах) от начала файла (на который указывает дескриптор zp), в которую будет осуществляться запись или чтение (gz-функциями).
При ошибке возвращает FALSE.
Дескриптор zp должен был быть ранее успешно возвращен функцией gzopen().
См. также: gzopen(), gzseek() и gzrewind().
gzseek
Перемещение курсора gz-файла int gzseek (int zp, int offset)
Передвигает позицию курсора файла (на который указывает дескриптор zp) на число байтов от его начала offset.
Если файл открыт для чтения, то функция эмулируется, и она будет выполняться крайне медленно (так как в сжатых файлах смещение нужно вычислять). Если файл открыт для записи, то курсор можно сдвигать только вперед (тогда в файл просто записывается последовательность нулей вплоть до новой позиции).
Функция возвращает 0 или -1 - при ошибке. Заметьте, перемещение курсора в позицию после символа EOF не считается ошибкой.
См. также: gztell() и gzrewind().
gzrewind
Перемещение курсора в начало gz-файла
int gzrewind (int zp)
При ошибке возвращается 0.
Дескриптор zp должен был быть ранее успешно возвращен функцией gzopen().
См. также: gzseek() и gztell().