Відверто кажучи, ніякої особливої адаптації не потрібно, бо цей скрипт від 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';
}
?>
Для виводу, треба вирішити, яку директорію потрібно архівувати і куди складати готові 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
, хоча в більшості випадків він включений, але, про всяк випадок, потрібно це пам'ятати.