- Работа с zip архивами в PHP: запаковка и распаковка файлов
- Запаковка файлов в zip
- Распаковка файлов из zip
- Распаковываем zip архив средствами PHP
- 5 последних уроков рубрики «PHP»
- Фильтрация данных с помощью zend-filter
- Контекстное экранирование с помощью zend-escaper
- Подключение Zend модулей к Expressive
- Совет: отправка информации в Google Analytics через API
- Подборка PHP песочниц
- ZIP в PHP (ZipArchive)
- Добавление файлов в архив
- Заархивировать директорию с содержимым
- Переименовать файл
- Если файл лежит в папке
- Удалить файл из архива
- Если файл лежит в папке
- Список файлов в архиве
- Извлечь весь архив
- Извлечь определенные файлы
- Извлечь файл в поток
- Распаковываем zip архив средствами PHP
- 5 последних уроков рубрики «PHP»
- Фильтрация данных с помощью zend-filter
- Контекстное экранирование с помощью zend-escaper
- Подключение Zend модулей к Expressive
- Совет: отправка информации в Google Analytics через API
- Подборка PHP песочниц
Работа с zip архивами в PHP: запаковка и распаковка файлов
Когда необходимо программно запаковать файлы в zip архив, используйте модуль — ZipArchive , который установлен практически на всех серверах вместе с PHP.
Для работы с модулем, используется одноименный класс – ZipArchive .
Запаковка файлов в zip
Пример показывает как запаковать все папки, подпапки и файлы в них с помощью ZipArchive .
/** * Create zip archive from specified folder. * * @param $source * @param $destination * @param bool $include_sourse * * @return string * * @ver 0.1 (kama) */ function zip_folder( $source, $destination, $include_sourse = true )< $source = str_replace( '\\', '/', rtrim( realpath( $source ), '/' ) ); if( ! file_exists( $source ) ) return 'Error: file not exists'; $zip = new ZipArchive(); if( ! $zip->open( $destination, ZIPARCHIVE::CREATE | ZIPARCHIVE::OVERWRITE ) ) return 'Error: ZipArchive not installed'; if( $include_sourse ) $zip->addEmptyDir( basename($source) ); if( is_file( $source ) )< $zip->addFile( $source ); > elseif( is_dir( $source ) ) < foreach( new RecursiveIteratorIterator( new RecursiveDirectoryIterator($source), RecursiveIteratorIterator::SELF_FIRST ) as $file_path =>$file_obj )< // Ignore . | .. folders if( preg_match('~/[.]$~', $file_path) ) continue; $file_rel_path = str_replace( "$source/", '', $file_path ); if( $include_sourse ) $file_rel_path = basename($source) .'/'. $file_rel_path; if( is_dir( $file_path ) )< $zip->addEmptyDir( $file_rel_path ); > elseif( is_file( $file_path ) )< $zip->addFile( $file_path, $file_rel_path ); > > > $zip->close(); return 'Done'; >
$source = __DIR__ . '/wp-content'; $destination = __DIR__ . '/_'. basename($source) .'-'. date( 'd-m-Y' ) . '.zip'; echo zip_folder( $source, $destination );
Распаковка файлов из zip
Теперь, пример распаковки zip архива с помощью ZipArchive .
function unzip_file( $file_path, $dest )< $zip = new ZipArchive; if( ! is_dir($dest) ) return 'Нет папки, куда распаковывать. '; // открываем архив if( true === $zip->open($file_path) ) < $zip->extractTo( $dest ); $zip->close(); return true; > else return ‘Произошла ошибка при распаковке архива’; > // использование $zipfile = ‘test.zip’; // путь до файла архива $pathdir = ‘test/’; // путь к папке, в которую будет распакован архив $done = unzip_file( $zipfile, $pathdir ); if( is_string($done) )
В WordPress для распаковки архивов есть специальные функция (работают только в админке) unzip_file()
Распаковываем zip архив средствами PHP
Сегодня мы рассмотрим небольшое продолжение одного из предыдущих уроков и продемонстрируем небольшой сниппет для распаковки ZIP архива.
Совсем недавно мы рассмотрели как создавать ZIP архив средствами PHP. Сегодня взглянем на сниппет обратного действия.
open('test.zip') === TRUE) < // путь к каталогу, в который будут помещены файлы $zip->extractTo('my_dir'); $zip->close(); // удача > else < // неудача >
Данный урок подготовлен для вас командой сайта ruseller.com
Источник урока: www.ruseller.com
Автор: Станислав Протасевич
Урок создан: 2 Июля 2013
Просмотров: 22704
Правила перепечатки
5 последних уроков рубрики «PHP»
Фильтрация данных с помощью zend-filter
Когда речь идёт о безопасности веб-сайта, то фраза «фильтруйте всё, экранируйте всё» всегда будет актуальна. Сегодня поговорим о фильтрации данных.
Контекстное экранирование с помощью zend-escaper
Обеспечение безопасности веб-сайта — это не только защита от SQL инъекций, но и протекция от межсайтового скриптинга (XSS), межсайтовой подделки запросов (CSRF) и от других видов атак. В частности, вам нужно очень осторожно подходить к формированию HTML, CSS и JavaScript кода.
Подключение Zend модулей к Expressive
Expressive 2 поддерживает возможность подключения других ZF компонент по специальной схеме. Не всем нравится данное решение. В этой статье мы расскажем как улучшили процесс подключение нескольких модулей.
Совет: отправка информации в Google Analytics через API
Предположим, что вам необходимо отправить какую-то информацию в Google Analytics из серверного скрипта. Как это сделать. Ответ в этой заметке.
Подборка PHP песочниц
Подборка из нескольких видов PHP песочниц. На некоторых вы в режиме online сможете потестить свой код, но есть так же решения, которые можно внедрить на свой сайт.
ZIP в PHP (ZipArchive)
Класс ZipArchive позволяет быстро и удобно работать с ZIP-архивам, рассмотрим основные возможности класса.
Добавление файлов в архив
В примере используются константы:
- ZipArchive::CREATE – создавать архив, если он не существует
- ZipArchive::OVERWRITE – если архив существует, то игнорировать текущее его содержимое т.е. работать как с пустым архивом.
$zip = new ZipArchive(); $zip->open(__DIR__ . '/archive.zip', ZipArchive::CREATE|ZipArchive::OVERWRITE); $zip->addFile(__DIR__ . '/image1.jpg', 'image1.jpg'); $zip->addFile(__DIR__ . '/image2.jpg', 'image2.jpg'); $zip->close();
Если файл необходимо поместить в директорию, то предварительно не нужно создавать пустую папку. Можно просто указать путь и имя файла, например «src»:
$zip->addFile(__DIR__ . '/image1.jpg', 'src/image1.jpg'); $zip->addFile(__DIR__ . '/image2.jpg', 'src/image2.jpg');
Если текстовой файл генерится прямо в скрипте, то удобней скинуть его в архив методом addFromString() .
$contents = 'Содержание файла file.log'; $zip = new ZipArchive(); $zip->open(__DIR__ . '/archive.zip', ZipArchive::CREATE|ZipArchive::OVERWRITE); $zip->addFromString('file.log', $contents); $zip->close();
Заархивировать директорию с содержимым
Сделать архив сайта можно с помощью рекурсивной функции, функция обойдет все файлы в директориях и добавит их в архив.
function addFileRecursion($zip, $dir, $start = '') < if (empty($start)) < $start = $dir; >if ($objs = glob($dir . '/*')) < foreach($objs as $obj) < if (is_dir($obj)) < addFileRecursion($zip, $obj, $start); >else < $zip->addFile($obj, str_replace(dirname($start) . '/', '', $obj)); > > > > $zip = new ZipArchive(); $zip->open(__DIR__ . '/archive.zip', ZipArchive::CREATE|ZipArchive::OVERWRITE); addFileRecursion($zip, __DIR__ . '/test'); $zip->close();
Переименовать файл
$zip = new ZipArchive(); $zip->open(__DIR__ . '/archive.zip'); $zip->renameName('image2.jpg', 'images.jpg'); $zip->close();
Если файл лежит в папке
$zip->renameName('src/image2.jpg', 'src/images.jpg');
Удалить файл из архива
$zip = new ZipArchive(); $zip->open(__DIR__ . '/archive.zip'); $zip->deleteName('image2.jpg'); $zip->close();
Если файл лежит в папке
$zip->deleteName('src/image2.jpg');
Список файлов в архиве
$zip = new ZipArchive(); $zip->open(__DIR__ . '/archive.zip'); $i = 0; $list = array(); while($name = $zip->getNameIndex($i)) < $list[$i] = $name; $i++; >print_r($list); $zip->close();
Array ( [0] => src/image1.jpg [1] => src/image2.jpg [2] => file.log )
Извлечь весь архив
$zip = new ZipArchive(); $zip->open(__DIR__ . '/archive.zip'); $zip->extractTo(__DIR__); $zip->close();
Извлечь определенные файлы
$zip = new ZipArchive(); $zip->open(__DIR__ . '/archive.zip'); $zip->extractTo(__DIR__, array('src/image1.jpg', 'src/image2.jpg')); $zip->close();
Извлечь файл в поток
Данный метод удобен если требуется только прочитать содержимое файла.
$zip = new ZipArchive(); $zip->open(__DIR__ . '/archive.zip'); $contents = ''; $fp = $zip->getStream('file.log'); while (!feof($fp)) < $contents .= fread($fp, 2); >fclose($fp); echo $contents; $zip->close();
Распаковываем zip архив средствами PHP
Сегодня мы рассмотрим небольшое продолжение одного из предыдущих уроков и продемонстрируем небольшой сниппет для распаковки ZIP архива.
Совсем недавно мы рассмотрели как создавать ZIP архив средствами PHP. Сегодня взглянем на сниппет обратного действия.
open('test.zip') === TRUE) < // путь к каталогу, в который будут помещены файлы $zip->extractTo('my_dir'); $zip->close(); // удача > else < // неудача >
Данный урок подготовлен для вас командой сайта ruseller.com
Источник урока: www.ruseller.com
Автор: Станислав Протасевич
Урок создан: 2 Июля 2013
Просмотров: 22705
Правила перепечатки
5 последних уроков рубрики «PHP»
Фильтрация данных с помощью zend-filter
Когда речь идёт о безопасности веб-сайта, то фраза «фильтруйте всё, экранируйте всё» всегда будет актуальна. Сегодня поговорим о фильтрации данных.
Контекстное экранирование с помощью zend-escaper
Обеспечение безопасности веб-сайта — это не только защита от SQL инъекций, но и протекция от межсайтового скриптинга (XSS), межсайтовой подделки запросов (CSRF) и от других видов атак. В частности, вам нужно очень осторожно подходить к формированию HTML, CSS и JavaScript кода.
Подключение Zend модулей к Expressive
Expressive 2 поддерживает возможность подключения других ZF компонент по специальной схеме. Не всем нравится данное решение. В этой статье мы расскажем как улучшили процесс подключение нескольких модулей.
Совет: отправка информации в Google Analytics через API
Предположим, что вам необходимо отправить какую-то информацию в Google Analytics из серверного скрипта. Как это сделать. Ответ в этой заметке.
Подборка PHP песочниц
Подборка из нескольких видов PHP песочниц. На некоторых вы в режиме online сможете потестить свой код, но есть так же решения, которые можно внедрить на свой сайт.