Использование потоков PHP
В PHP была введена концепция потоков PHP. С этого момента образовался общий знаменатель всех типов ресурсов: файлов, данных HTTP и FTP и даже архивных файловых форматов. Итак рассмотрим то, что связано с файлами - потоки сжатия. Код <?php $filename = __FILE__; $zipfile = "$filename.zip"; $data = file_get_contents(__FILE__); echo 'Загруженный файл (размер: ' . strlen($data) . ').<br>'; file_put_contents("compress.zlib://$zipfile", $data); echo ' Запаковаййный файл (размер: ' . filesize ($zipfile) . ').<br>'; $data = file_get_contents("compress.zlib://$zipfile"); echo 'Оригинальный размер файла: ' . strlen($data) . '.'; ?> С помощью одного из этих потоков можно использовать файлы ZIP. А при помощи псевдопротокола compress.zlib:// к файлам ZIP можно обращаться так же, как и к обычным файлам. Для этого в системе UNIX/Linux нужно задействовать переключатель конфигураций -with-gzip; в системе Windows эти библиотеки включены изночально. Далее вы можете использовать файлы с помощью, например , file_get_contents() и file_put_contents(). Привыполнении приведенного кода текущий файл загружается с помощью file_get_contents(), сжимается по алгоритму zip и записывается на жесткий диск с помощью file_put_contents(). После этого считывается сжатый файл с помощью file_get_contents() и сравниваются размеры файлов. Как альтернативу можно использовать встроенные в PHP функции ZIP, реализованные посредством интерфейсной функции ZZIPlib. К сожалению, эта функция может только читать данные из файла ZIP, но она поддрживает наличие в архиве нескольких файлов. Чтобы установить данное расширение, в системе Windows используется строка extension=php_zip.dll в php.ini или сконфигурируйте PHP с ключем -with-zip, указав путь к ZZIPlib. Чтобы использовать расширение, следует выполнить такие действия:
В приведенном ниже примере показывается содержимое архива ZIP и определяются имена и размеры всех файлов. Код <?php $zipfile = dirname(__FILE__) . '/archive.zip'; if ($zip = zip_open($zipfile)) { while ($file = zip_read($zip)) { printf('%s (%d)<br>', zip_entry_name($file), zip_entry_filesize($file)); } zip_close($zip); } ?> | |
| |
Похожие материалы: |
|