Файл: admin/zip.php
Строк: 41
<?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;