View file engine/classes/table.class.php

File size: 3.6Kb
<?php
/**
 * Класс для резервных копирований базы данных
 * 
 * @package Classes
 * @author Shamsik
 * @link http://shcms.ru
 */

define('MSB_NL', "\r\n");
define('MSB_STRING', 0);
define('MSB_DOWNLOAD', 1);
define('MSB_SAVE', 2);

class MySQL_Backup {

    var $characters = '';
    var $backup_dir = '';
    var $returnSQL = '';
    

    function Execute() 
	{
	    global $db;	
		
            return $this->_active();
			
    }

    function _active()
	{
	    global $db;
		
        $return = $this->_Query('SHOW TABLES');
		
            while($catch = $db->get_array($return)){
			
                $value[] = $catch['Tables_in_'.$this->database];
				
            }
			
            $this->_createTable($value);
             
		if($t12ake = $this->_SaveToFile())
		{
		
            echo $this->returnSQL;
			
        }
		
        else 
		{
		
            die(Lang::__('Не могу сохранить файл, не стоят права на папку.'));
        
		}
 
    }

    function _createTable($val) 
	{
	    global $db; 
		    
			foreach($val as $a){
            
			    @$create = $db->get_array($this->_Query("SHOW CREATE TABLE `{$a}`"));
                
				$this->returnSQL .= '
                --
                -- Структура таблицы `' . $a . '`;
                --'.MSB_NL;
				
                $this->returnSQL .= 'DROP TABLE IF EXISTS `' . $a . '`;'.MSB_NL;
                $this->returnSQL .= $create[1].';'.MSB_NL.MSB_NL.MSB_NL;
                $this->returnSQL .= $this->createInsert($a);
            
			}
    }

    function createInsert($table) 
	{
	    global $db;
		    
			$value = '';
            
			    if (!($result = $this->_Query( "SELECT * FROM  `{$table}`" ) ) ) 
				{
                    
					return false;
					
                }
				
            while ($row = $db->fetch_row($result))
			{
            
			    $values = '';
                    
					foreach ($row as $data){ 
                    
					    $values .= '\'' . addslashes($data) . '\', ';
                
				    }
					
                $values = substr($values, 0, -2);
                $value .= 'INSERT INTO ' . $table . ' VALUES (' . $values . ');' . MSB_NL;
				
            }
		
        return $value;
    
	}


    /**
     * Функция соединение запросов
     */
    function _Connect() 
	{
	
	    global $db;
		
            $db->query('SET NAMES '.$this->characters);
			
    }

    function _Query($sql)
	{
	
	    global $db;
            
			$result = $db->query($sql);
			
        return $result;
    
	}

	
    /**
     * Сохранение бэкапа на хосте
     */    
    function _SaveToFile()
	{ 
	
        global $db;
		
            $fname = $this->backup_dir.''.time().'_'.DBNAME.'.sql';
            
			    if (!($f = fopen($fname, 'w+')))
                    return false;
 
                    fwrite($f, $this->returnSQL);
                    fclose($f);
					
                    $this->_DownloadFile($fname);
					
        return $fname;
		
    }

    /**
     * Скачивание бэкапа
     * 
     * @param $fname Название таблицы
     */
    function _DownloadFile($fname) 
	{
	
            echo engine::success(Lang::__('Бекап сайта успешно сохранено в папке sql/'));
            echo engine::home(array(Lang::__('Назад'),'index.php?do=sql&act=backup'));		
            
			exit;
			
        return true;
		
    }

}