Файл: admin/backup/files.php
Строк: 83
<?php
    include '../../engine/includes/start.php';
    if (!$creator){
        Core::stop();
    }
    $set['title'] = 'Резервное копирование файлов';
    require incDir . 'head.php';
    //@set_time_limit(20);
    echo '<div class="menu_razd">Выбор файлов</div>';
    echo '<div class="post"><img src="/style/users/icons/admin_man_on.png"/> <a href="/pages/user.php?id=2">Система</a><br />Резервное копирование долгий и ресурсоемкий процесс, если бекап не создается, раскоментируйте 9-строку <b>set_time_limit(20);</b>. На бесплатных хостингах, резервное копирование является платным, на платных нет смысла делать =)</div>';
    if (Core::form('search_bom')){
        $dir = dirname(H);
        function recursive_dir($dir)
        {
            $arr = null;
            $char = "xEFxBBxBF";
            $find = 0;
            foreach (new DirectoryIterator($dir) as $fileInfo){
                if ($fileInfo->isDot()){
                    continue;
                }
                if ($fileInfo->isDir()){
                    $find += recursive_dir($fileInfo->getPathname());
                }
                elseif ($fileInfo->isFile()){
                    //$arr .= '|' . $fileInfo->getPathname();
                    $file = new SplFileObject($fileInfo->getPathname());
                    $file->setMaxLineLen(4);
                    $data = $file->fgets();
                    if ($char === $data){
                        Core::msg_show('Обнаружен BOM в файле ' . $fileInfo->getPathname());
                        $find++;
                    }
                    $file->fseek(0);
                }
            }
            return $find;
        }
        $res = recursive_dir(H);
        if ($res == 0)
        {
            Core::msg_show('Файлы с BOM не обнаружены', 'msg');
        }
    }
    $arr = array();
    if (isset($_POST['file_zip'])){
        foreach ($_POST['file_zip'] as $file){
            $arr[] = H . $file;
        }
        $name = empty($_POST['name']) ? 'Backup_' . mt_rand(12, 1222) : $_POST['name'];
        if (is_file(H . 'engine/files/backup/files/' . $name . '.zip') and empty($_POST['delcopy'])){
            echo 'Архив ' . $name . '.zip уже есть!<br/><a href="backup.php">Повторить</a>';
            require incDir . 'foot.php';
        }
        elseif (is_file(H . 'engine/files/backup/files/' . $name . '.zip')){
            echo 'Архив ' . $name . '.zip заменен<br />';
        }
        $create = new PclZip(H . 'engine/files/backup/files/' . $name . '.zip'); //var_dump($arr);
        //$create -> ($arr, PCLZIP_OPT_REMOVE_PATH, '\');
        Core::msg_show($create->create($arr, PCLZIP_OPT_REMOVE_PATH,
                                       H) == 0 ? $create->errorInfo(true) : 'Архив создан!');
        unset($create, $file);
    }
    echo '<form method="post"><input type="text" name="name" size="40" value="Backup__' . date("d_m_y") . '__' . (mt_rand(0, 999)) . '"/><br/>';
    $dir = opendir('../../');
    echo isset($_GET['get']) ? '<a href="?" class="link">Снять все</a>' : '<a href="?get" class="link">Отметить все</a>';
    echo '<div class="link"><label><input type="checkbox" name="search_bom" value="search_bom"/> Найти файлы с BOM сигнатурой</label></div>';
    while ($file = readdir($dir)) {
        if ($file != '.' && $file != '..'){
            echo '
                <div class="link"><label>
                <input type="checkbox" ' . (isset($_GET['get']) ? 'checked="checked"' : '') . ' name="file_zip[]" value="' . $file . '"/> ' . $file . ' (' . (is_file(H . $file) ? Text::size_data(filesize(H . $file)) : 'папка') . ')
                </label></div>';
        }
    }
    closedir($dir);
?>
    <div class="post"><input type="checkbox" checked="checked" name="delcopy" value="1"/> Заменить при совпадении имен
    </div>
    <input type="submit" name="create" value="Архивировать"/></form>
    <div class="menu_razd">См. также</div>
    <a href='/admin/backup/list.php'>
        <div class="link">Список Backup</div>
    </a>
    <a href='mysql.php'>
        <div class="link">Резервное копирование базы данных</div>
    </a>
    <a href='/admin/'>
        <div class="link">Админка</div>
    </a>
<?
    require incDir . 'foot.php';