<?php
/**
* Zip Archive
*
* Creates a zip archive of the site
*
* @package GetSimple
* @subpackage Backups
*/
// Setup inclusions
$load['plugin'] = true;
// Include common.php
include('inc/common.php');
login_cookie_check();
// check validity of request
if ($_REQUEST['s'] === $SESSIONHASH) {
# fix from hameau
//$timestamp = date('Y-m-d-Hi');
$timestamp = gmdate('Y-m-d-Hi_s');
$zipcreated = true;
set_time_limit (0);
ini_set("memory_limit","800M");
$saved_zip_file = GSBACKUPSPATH.'zip/'. $timestamp .'_archive.zip';
$sourcePath = str_replace('/', DIRECTORY_SEPARATOR, GSROOTPATH);
if (!class_exists ( 'ZipArchive' , false)) {
include('inc/ZipArchive.php');
}
if (class_exists ( 'ZipArchive' , false)) {
$archiv = new ZipArchive();
$archiv->open($saved_zip_file, ZipArchive::CREATE);
$dirIter = new RecursiveDirectoryIterator($sourcePath);
$iter = new RecursiveIteratorIterator($dirIter,
RecursiveIteratorIterator::LEAVES_ONLY,
RecursiveIteratorIterator::CATCH_GET_CHILD
);
foreach($iter as $element) {
/* @var $element SplFileInfo */
$dir = str_replace($sourcePath, '', $element->getPath()) . DIRECTORY_SEPARATOR;
if ( strstr($dir, $GSADMIN.DIRECTORY_SEPARATOR ) || strstr($dir, 'backups'.DIRECTORY_SEPARATOR )) {
#don't archive these folders
} else if ($element->getFilename() != '..') { // FIX: if added to ignore parent directories
if ($element->isDir()) {
$archiv->addEmptyDir($dir);
} elseif ($element->isFile()) {
$file = $element->getPath() .
DIRECTORY_SEPARATOR . $element->getFilename();
$fileInArchiv = $dir . $element->getFilename();
// add file to archive
$archiv->addFile($file, $fileInArchiv);
}
}
}
$archiv->addFile(GSROOTPATH.'.htaccess', '.htaccess' );
$archiv->addFile(GSROOTPATH.'gsconfig.php', 'gsconfig.php' );
// save and close
$status = $archiv->close();
if (!$status) {
$zipcreated = false;
}
} else {
$zipcreated = false;
}
if (!$zipcreated) {
$zipcreated = archive_targz();
}
if (!$zipcreated) {
redirect('archive.php?nozip');
}
// redirect back to archive page with a success
redirect('archive.php?done');
} else {
# page accessed directly - send back to archives page
redirect('archive.php');
}
exit;