Файл: controllers/backup.php
Строк: 528
<?php
session_start();
if (!isset($_SESSION['auth'])) 
{
    die("0");
}
include("../config.php");
if (isset($_POST['dobu'])) $dobu = addslashes(htmlspecialchars(strip_tags(trim($_POST['dobu'])))); else die("0"); //1 - бекапим, 2-восстанавливаем
if (isset($_POST['arhname'])) $archivename = addslashes(htmlspecialchars(strip_tags(trim($_POST['arhname'])))); else die("0"); //имя файла
if (isset($_POST['startpath'])) $path = addslashes(htmlspecialchars(strip_tags(trim(rtrim(preg_replace('/\+|/+/', '/', $_POST['startpath']), '/'))))); else die("0"); //начальная папка бекапа/восстановления
if (isset($_POST['stoppath'])) $stoppath = addslashes(htmlspecialchars(strip_tags(trim($_POST['stoppath'])))); //пропуски
if (isset($_POST['rassh'])) $rassh = addslashes(htmlspecialchars(strip_tags(trim($_POST['rassh'])))); //расширения для пропусков
if (isset($_POST['maxsize'])) $maxsize = addslashes(htmlspecialchars(strip_tags(trim($_POST['maxsize'])))); //максимальный размер файлов в бекап
if (isset($_POST['bufile'])) $bufile = addslashes(htmlspecialchars(strip_tags(trim($_POST['bufile'])))); else die("0"); //файл для распаковки/упаковки
$path = str_replace("..", "", $path);
$this_script = $_SERVER["SCRIPT_FILENAME"];
$this_script_dir = dirname($this_script);
$cwd = getcwd();
$cwd = preg_replace('/\+|/+/', '/', $cwd);
$wspl1 = chr(119).chr(105).chr(115).chr(112).chr(108);
$wspl2 = chr(119).chr(105).chr(36).chr(112).chr(108);
$wsfn1 = chr(119).chr(105).chr(115).chr(102).chr(110);
$wsfn2 = chr(119).chr(105).chr(36).chr(102).chr(110);
if($stoppath == "")
    $exludethisdir=false; // - не эти каталоги TRUE/FALSE
else
    $exludethisdir=true; // - не эти каталоги TRUE/FALSE
$exludethisdirmode = $stoppath;
if($rassh == "")
    $onlythisext=false; // - только с расширением TRUE/FALSE
else
    $onlythisext=true; 
$onlythisextmode = $rassh;
if($maxsize == "")
    $onlyfilesize=false; // - не более байт TRUE/FALSE
else
    $onlyfilesize=true;
$onlyfilesizemode = $maxsize;
$exludesubdirs=false; // - не обрабатывать подкаталоги
switch ($dobu)
{
    case "1":
        $site_root = $path;
        $path_result = compress($path, $archivename);
        die($path_result);
      break;
    case "2":
        $site_root = SANTI_SERVERPATH."/".SANTI_PATH."/datas/unarchive/".$path;
        $path_result = decompress(SANTI_SERVERPATH."/".SANTI_PATH."/datas/unarchive/".$path, "../".$bufile);
        die($path_result);
      break;      
    case "3":
        die("0");
        break;
    default:
        die("0");
        break;
}
/*compress*/
function compress($path, $archivename) 
{
        global $this_script_dir, $site_root, $totalbytes, $totalfiles, $output, $add_in_contents;
        @chdir($site_root);
        _get_dir_tree();
        if (extension_loaded('zlib')) {
                $fpz = gzopen (SANTI_SERVERPATH.'/'.SANTI_PATH.'/datas/backups/'.$archivename, 'wb9');
                gzwrite ($fpz, $add_in_contents);
                gzclose ($fpz);
                } else {
                        $output = '';
                        return "0";
                        }
        return "1";
}
/*compress*/
/*decompress*/
function decompress($path, $selarchive) {
        global $conf, $site_root, $wspl1, $wspl2, $wsfn1, $wsfn2, $fileoverwrite, $filegroup_list, $filegroup_activated, $filegroup_other_activated, $output, $filegroup_perms, $filegroup_other_perms, $new_dir_perms, $new_dir_perms_on, $uninstlog, $nolog, $neverlog;
        $filename = $selarchive;
        if (!file_exists($filename)) {
                return "0";
        } else {
        $site_root_md = explode('/', $site_root);
        $site_root_mk = '';
        for ($site_root_md_cc = 0; $site_root_md_cc < count($site_root_md); $site_root_md_cc++) {
                $site_root_mk .= $site_root_md[$site_root_md_cc].'/';
                if (@!file_exists($site_root_mk)) {
                        if ($new_dir_perms_on) {
                                if (@mkdir($site_root_mk, octdec('0'.$new_dir_perms))) {
                                        $output .= '<span class="filedir">'.$conf['lang_makedir'].': ...'.substr($site_root_mk, -70).'</span><br />';
                                        if ($nolog == FALSE) {
                                                $uninstlog .= $site_root_mk."n";
                                                }
                                        }
                                } else {
                                        if (@mkdir($site_root_mk)) {
                                                $output .= '<span class="filedir">'.$conf['lang_makedir'].': ...'.substr($site_root_mk, -70).'</span><br />';
                                                if ($nolog == FALSE) {
                                                        $uninstlog .= $site_root_mk."n";
                                                        }
                                                }
                                        }
                        }
        }
        $fh = gzopen($filename, 'rb');
        $unp = '';
        while (!feof($fh)) {
                $unp .= gzread($fh, 5242880);
                }
        gzclose($fh);
        $error_in_func = false;
        if (substr($unp, 0, 5) !== chr(119).chr(105).chr(115).chr(112).chr(108)) {
                //error($conf['lang_notsupportedarchive']);
                $error_in_func = true;
                }
        $splarr = explode($wspl1, $unp);
        $stored_unp_path = 'winull';
        if (!$error_in_func) {
        foreach ($splarr as $splarrk => $splarrv) {
                if (strlen($splarrv) < 1) {continue;}
                list ($fileunp, $permsunp, $contentsunp) = explode($wsfn1, $splarrv);
                $contentsunp = str_replace($wspl2, $wspl1, $contentsunp);
                $contentsunp = str_replace($wsfn2, $wsfn1, $contentsunp);
                $fileunp_dir = dirname($fileunp);
                $fileunp_fn = basename($fileunp);
                $fileunp_dir = trim($fileunp_dir, '\/ ');
                $fileunp_dir_sl_trigger = (strlen($fileunp_dir) == 0) ? '' : '/';
                $fileunp_dir = $fileunp_dir_sl_trigger.$fileunp_dir.'/';
                $fileunp_dir_dirs_v_pluser = '';
                if ($stored_unp_path != $fileunp_dir) {
                        $fileunp_dir_trimmed = trim($fileunp_dir, '\/ ');
                        if (substr_count($fileunp_dir_trimmed, '/') > 0) {
                                $fileunp_dir_dirs = explode('/', $fileunp_dir_trimmed);
                                foreach ($fileunp_dir_dirs as $fileunp_dir_dirs_v) {
                                        $fileunp_dir_dirs_v_pluser .= '/'.$fileunp_dir_dirs_v;
                                        if (!file_exists($site_root.$fileunp_dir_dirs_v_pluser)) {
                                                if ($new_dir_perms_on) {
                                                        if (@mkdir($site_root.$fileunp_dir_dirs_v_pluser, octdec('0'.$new_dir_perms))) {
                                                                $output .= '<span class="filedir">'.$conf['lang_makedir'].': ...'.substr($site_root, -50).$fileunp_dir_dirs_v_pluser.'</span><br />';
                                                                if ($nolog == FALSE) {
                                                                        $uninstlog .= $site_root.$fileunp_dir_dirs_v_pluser."n";
                                                                        }
                                                                }
                                                        } else {
                                                                if (@mkdir($site_root.$fileunp_dir_dirs_v_pluser)) {
                                                                        $output .= '<span class="filedir">'.$conf['lang_makedir'].': ...'.substr($site_root, -50).$fileunp_dir_dirs_v_pluser.'</span><br />';
                                                                        if ($nolog == FALSE) {
                                                                                $uninstlog .= $site_root.$fileunp_dir_dirs_v_pluser."n";
                                                                                }
                                                                        }
                                                                }
                                                }
                                        }
                                } elseif (strlen($fileunp_dir_trimmed) > 0) {
                                        if (!file_exists($site_root.$fileunp_dir)) {
                                                if ($new_dir_perms_on) {
                                                        if (@mkdir($site_root.$fileunp_dir, octdec('0'.$new_dir_perms))) {
                                                                $output .= '<span class="filedir">'.$conf['lang_makedir'].': ...'.substr($site_root, -50).$fileunp_dir.'</span><br />';
                                                                if ($nolog == FALSE) {
                                                                        $uninstlog .= $site_root.$fileunp_dir."n";
                                                                        }
                                                                }
                                                        } else {
                                                                if (@mkdir($site_root.$fileunp_dir)) {
                                                                        $output .= '<span class="filedir">'.$conf['lang_makedir'].': ...'.substr($site_root, -50).$fileunp_dir.'</span><br />';
                                                                        if ($nolog == FALSE) {
                                                                                $uninstlog .= $site_root.$fileunp_dir."n";
                                                                                }
                                                                        }
                                                                }
                                                }
                                        } else {
                                                if (!file_exists($site_root.$fileunp_dir)) {
                                                        if ($new_dir_perms_on) {
                                                                if (@mkdir($site_root.$fileunp_dir, octdec('0'.$new_dir_perms))) {
                                                                        $output .= '<span class="filedir">'.$conf['lang_makedir'].': ...'.substr($site_root, -50).$fileunp_dir.'</span><br />';
                                                                        if ($nolog == FALSE) {
                                                                                $uninstlog .= $site_root.$fileunp_dir."n";
                                                                                }
                                                                        }
                                                                } else {
                                                                        if (@mkdir($site_root.$fileunp_dir)) {
                                                                                $output .= '<span class="filedir">'.$conf['lang_makedir'].': ...'.substr($site_root, -50).$fileunp_dir.'</span><br />';
                                                                                if ($nolog == FALSE) {
                                                                                        $uninstlog .= $site_root.$fileunp_dir."n";
                                                                                        }
                                                                                }
                                                                        }
                                                        }
                                                }
                                                $stored_unp_path = $fileunp_dir;
                        }
                if (file_exists($site_root.$fileunp_dir.$fileunp_fn)) {
                        if ($fileoverwrite) {
                                @$fp = fopen ($site_root.$fileunp_dir.$fileunp_fn, "wb");
                                if (@fwrite ($fp, $contentsunp)) {
                                        $output .= '<span class="filefile">'.$conf['lang_overwrite'].': '.$fileunp_fn.'<span><br />';
                                        if ($nolog == FALSE) {
                                                $uninstlog .= $site_root.$fileunp_dir.$fileunp_fn."n";
                                                }
                                        }
                                @fclose ($fp);
                                } else {
                                        $output .= '<span class="filefile">'.$fileunp_fn.' '.$conf['lang_exists'].'. '.$conf['lang_missed'].'.<span><br />';
                                        if ($nolog == FALSE) {
                                                $uninstlog .= $site_root.$fileunp_dir.$fileunp_fn."n";
                                                }
                                        }
                        } else {
                                @$fp = fopen ($site_root.$fileunp_dir.$fileunp_fn, "wb");
                                if (@fwrite ($fp, $contentsunp)) {
                                        $output .= '<span class="filefile">'.$conf['lang_unpack'].': '.$fileunp_fn.'<span><br />';
                                        if ($nolog == FALSE) {
                                                $uninstlog .= $site_root.$fileunp_dir.$fileunp_fn."n";
                                                }
                                        }
                                @fclose ($fp);
                                }
                if (preg_match('/\.('.$filegroup_list[1].')$/i', $fileunp_fn) and $filegroup_activated[1]) {
                        if (@chmod($site_root.$fileunp_dir.$fileunp_fn, octdec('0'.$filegroup_perms[1]))) {
                                $output .= $conf['lang_rirhtsfor'].' '.$fileunp_fn.' '.$conf['lang_rirhtsfor_end_sp'].' '.$conf['lang_rightsseted'].' '.$filegroup_perms[1].' '.$conf['lang_rightsseted_end_sp'].'<br />';
                                if ($nolog == FALSE) {
                                        $uninstlog .= $site_root.$fileunp_dir.$fileunp_fn."n";
                                        }
                                }
                        } else if (preg_match('/\.('.$filegroup_list[2].')$/i', $fileunp_fn) and $filegroup_activated[2]) {
                                if (@chmod($site_root.$fileunp_dir.$fileunp_fn, octdec('0'.$filegroup_perms[2]))) {
                                        $output .= $conf['lang_rirhtsfor'].' '.$fileunp_fn.' '.$conf['lang_rirhtsfor_end_sp'].' '.$conf['lang_rightsseted'].' '.$filegroup_perms[2].' '.$conf['lang_rightsseted_end_sp'].'<br />';
                                        if ($nolog == FALSE) {
                                                $uninstlog .= $site_root.$fileunp_dir.$fileunp_fn."n";
                                                }
                                        }
                                } else if (preg_match('/\.('.$filegroup_list[3].')$/i', $fileunp_fn) and $filegroup_activated[3]) {
                                        if (@chmod($site_root.$fileunp_dir.$fileunp_fn, octdec('0'.$filegroup_perms[3]))) {
                                                $output .= $conf['lang_rirhtsfor'].' '.$fileunp_fn.' '.$conf['lang_rirhtsfor_end_sp'].' '.$conf['lang_rightsseted'].' '.$filegroup_perms[3].' '.$conf['lang_rightsseted_end_sp'].'<br />';
                                                if ($nolog == FALSE) {
                                                        $uninstlog .= $site_root.$fileunp_dir.$fileunp_fn."n";
                                                        }
                                                }
                                        } else if ($filegroup_other_activated) {
                                                if (@chmod($site_root.$fileunp_dir.$fileunp_fn, octdec('0'.$filegroup_other_perms))) {
                                                        $output .= $conf['lang_rirhtsfor'].' '.$fileunp_fn.' '.$conf['lang_rirhtsfor_end_sp'].' '.$conf['lang_rightsseted'].' '.$filegroup_other_perms.' '.$conf['lang_rightsseted_end_sp'].'<br />';
                                                        if ($nolog == FALSE) {
                                                                $uninstlog .= $site_root.$fileunp_dir.$fileunp_fn."n";
                                                                }
                                                        }
                                                } else {
                                                        if (@chmod($site_root.$fileunp_dir.$fileunp_fn, octdec('0'.$permsunp))) {
                                                                $output .= $conf['lang_rirhtsfor'].' '.$fileunp_fn.' '.$conf['lang_rirhtsfor_end_sp'].' '.$conf['lang_rightsseted'].' '.$permsunp.' '.$conf['lang_rightsseted_end_sp'].'<br />';
                                                                if ($nolog == FALSE) {
                                                                        $uninstlog .= $site_root.$fileunp_dir.$fileunp_fn."n";
                                                                        }
                                                                }
                                                        }
                }
                }
        if ($neverlog == 0 and $nolog == FALSE and !file_exists($selarchive.'.salg')) {
                //$fplog = fopen ($selarchive.'.salg', 'w');
                //fwrite ($fplog, $uninstlog);
                //fclose ($fplog);
                }
        }
        return "1";;
}
/*decompress*/
function add_in_data ($add_in_data_file) 
{
        global $site_root, $add_in_contents, $wspl1, $wspl2, $wsfn1, $wsfn2;
        if (!isset($add_in_contents)) {$add_in_contents = '';}
        $contents = @file_get_contents($site_root.$add_in_data_file);
        $contents = @str_replace($wspl1, $wspl2, $contents);
        $contents = @str_replace($wsfn1, $wsfn2, $contents);
        $add_in_contents .= $wspl1;
        $add_in_contents .= $add_in_data_file;
        $add_in_contents .= $wsfn1;
        $add_in_contents .= @substr(sprintf('%o', fileperms($site_root.$add_in_data_file)), -3);
        $add_in_contents .= $wsfn1;
        $add_in_contents .= $contents;
}
function _get_dir_tree($parentdir='/') 
{
        //exludesubdirs - не обрабатывать подкаталоги TRUE/FALSE значение в 
        //exludethisdir - не эти каталоги TRUE/FALSE значение в $exludethisdirmode
        //onlythisext - только с расширением TRUE/FALSE значение в $onlythisextmode
        //onlyfilesize - не более байт TRUE/FALSE значение в $onlyfilesizemode
        global $totalbytes, $totalfiles, $output, $exludesubdirs, $onlythisext, $onlythisextmode, $onlyfilesize, $onlyfilesizemode, $exludethisdir, $exludethisdirmode;
        if (file_exists('.htaccess')) {
                $add_htaccess = 1;
                $add_htaccess2 = 1;
                if (!preg_match('/\.('.$onlythisextmode.')$/i', '.htaccess') and $onlythisext) {
                        $add_htaccess = 0;
                        }
                if ($onlyfilesize and filesize('.htaccess') > $onlyfilesizemode) {
                        $add_htaccess2 = 0;
                        }
                if ($add_htaccess == 1 and $add_htaccess2 == 1) {
                        add_in_data ($parentdir.'.htaccess');
                        $output .= ' <span class="filedir">'.ltrim($parentdir, '/').'.htaccess</span><br />';
                        }
        }
        if (file_exists('.htpasswd')) {
                $add_htpasswd = 1;
                $add_htpasswd2 = 1;
                if (!preg_match('/\.('.$onlythisextmode.')$/i', '.htpasswd') and $onlythisext) {
                        $add_htpasswd = 0;
                        }
                if ($onlyfilesize and filesize('.htpasswd') > $onlyfilesizemode) {
                        $add_htpasswd2 = 0;
                        }
                if ($add_htpasswd == 1 and $add_htpasswd2 == 1) {
                        add_in_data ($parentdir.'.htpasswd');
                        $output .= ' <span class="filedir">'.ltrim($parentdir, '/').'.htpasswd</span><br />';
                        }
                }
        foreach (glob('*')?glob('*'):array() as $file) {
                if (substr($file, 0, 4) == 'sabu') {continue;}
                /* extenshion fix. do not compress any *.auae */
                if (substr($file, -4, 4) == 'sabu') {continue;}
                if (is_file($file) && is_readable($file)) {
                        if ($onlyfilesize and filesize($file) > $onlyfilesizemode) {continue;}
                        if (!preg_match('/\.('.$onlythisextmode.')$/i', $file) and $onlythisext) {continue;}
                        add_in_data ($parentdir.$file);
                        $output .= ' <span class="filedir">'.ltrim($parentdir, '/').$file.'</span><br />';
                        } else if (is_dir($file)) {
                                if (!$exludesubdirs) {
                                        if (preg_match('/('.$exludethisdirmode.')$/i', $file) and $exludethisdir) {continue;}
                                        $cwd = getcwd();
                                        $site_root = preg_replace('/\+/', '/', $cwd);
                                        /*$output .= '<span class="filedir">'.$site_root.'/'.$file.'</span><br />';*/
                                        if (!@chdir ($file)) {
                                                continue;
                                                }
                                        _get_dir_tree($parentdir.$file.'/');
                                        chdir("..");
                                        }
                                }
        }
}
die("0");
?>