Шляхом Альбірео

НовиниЗаписиPHPСтворення zip-архіву

2022.07.14
Створення архівного файлу на стороні сервера. Адаптована версія для Albireo.
Note

Відверто кажучи, ніякої особливої адаптації не потрібно, бо цей скрипт від WP працює, що називається з коробки. Функцію лишається оформити у черговий snippet і трохи стилізувати. Сама функція для сніппету :

<?php

[ PHP ]

* 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('~/[.]{1,2}$~', $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'; } ?>
Note

Для виводу, треба вирішити, яку директорію потрібно архівувати і куди складати готові zip-файли. Наприклад, для директорії pages нашого фреймворку це може виглядати так:

<?php
$source = DATA_DIR . '/pages';
$destination = DATA_DIR . '/backup'. '/_'. basename($source) .'-'. date( 'd-m-Y' ) . '.zip';
echo zip_folder( $source, $destination );
?>

В результаті, директорія pages буде архівована сервером в zip-файл з іменем, яке створене з поточної дати, і поміщена в директорію backup того ж серверу.

Увага!

На сервері в PHP-налаштуваннях повинен бути включений модуль ZipArchive, хоча в більшості випадків він включений, але, про всяк випадок, потрібно це пам'ятати.