⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 backup.class.php

📁 Login Manager V3.0(LM3.0) is an authentication system which can integrate with any existing website
💻 PHP
📖 第 1 页 / 共 2 页
字号:
<?

define ('_CONNECTION_ERROR_',"DB Connection error.");

class backup extends db{


	var $backupdir = "backup";
	var $compression = "bz2";
	var $color1 = "#FFFF99";
	var $color2 = "#CCCCFF";
	var $color3 = "#FFFFFF";
	var $mysqldump = true;
	var $default_sort_order = "DateDesc";
	var $file_mod = "0777";

	function backup(){
		global $GonxAdmin;
		$this->compression = $GonxAdmin["compression_default"];
	}


	function tables_menu(){
		global $GONX;
		
		$color3 = $this->color3;
		$color2 = $this->color2;
		$color1 = $this->color1;
		
		$res = "\n<form action='?go=backuptables' method='post'>
				<table width=500 cellpadding=\"3\" style=\"border-collapse: collapse; border: 1px solid #666699; padding-left: 4; padding-right: 4; padding-top: 1; padding-bottom: 1\">
				<tr bgcolor=\"$color1\">
				<th width=150 align=left>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font face=arial size=2>Table</font></th>
				<th width=50 align=center><font face=arial size=2>Rows</font></th>
				<th width=70 align=center><font face=arial size=2>&nbsp;&nbsp;Create_time</font></th>
				<th width=70 align=center><font face=arial size=2>&nbsp;&nbsp;Update_time</font></th>
				<th width=70 align=center><font face=arial size=2>&nbsp;&nbsp;Check_time</font></th>
				</tr>\n\n";

        $result =  $this->query('SHOW TABLE STATUS');
		$i = 0;		$bgcolor = $color2;
        while ($table = @$this->fetch_array($result)) {
			if ($table["Update_time"]!=$table["Create_time"]) {
			    $l1 = "<label for=\"tables$i\">";
				$l2 = "</label>";
			} else {
				$l1 = $l2 = "";
			};
			$res .= "<tr bgcolor=\"$bgcolor\">
					<th align=left><input type='checkbox' id='tables$i' name='tables[]' value='".$table["Name"]."' />&nbsp;&nbsp;<font face=\"Verdana\" size=1 color=#006600><b>".strtoupper($table["Name"])."</b></font></th>
					<td align=center><font face=Verdana size=1 color=#006600>".$table["Rows"]."</font></td>
					<td align=center><font face=Verdana size=1 color=#006600>$l1".$table["Create_time"]."$l2</font></td>
					<td align=center><font face=Verdana size=1 color=#006600>$l1".$table["Update_time"]."$l2</font></td>
					<td align=center><font face=Verdana size=1 color=#006600>".$table["Check_time"]."</font></td>
					</tr>";
			if ($bgcolor==$color3) {
			    $bgcolor = $color2;
			} else $bgcolor = $color3;
			$i++;
		}
		
		$res .= "</table><br>&nbsp;<input type='checkbox' name='structonly' value='Yes'><font face=arial size=2> Only backup table structure</font><br><br>
				<p align=left><input type='submit' value='Backup DB'></p></form><br><br><br><br><br><br>";
		return $res;
	}
	

	function tables_backup($tables,$structonly){
		global $GONX;
		foreach($tables as $v){
            $res = $this-> query("SHOW CREATE TABLE " . $this -> dbName . "." .$v);
            while ($resu[] = $this -> get_data()) {
            } 
		}

        foreach($resu as $key => $val) {
			$tbl_name_status = $this->valid_table_name($val[0]);
            if (trim($val[0]) !== "" and $tbl_name_status) {
                $Dx_Create_Tables .= "
					# Drop table '" . $val[0] . "' if exist
					<xquery>
					DROP TABLE IF EXISTS " . $val[0] . ";
					</xquery>
					# create table '" . $val[0] . "'
					<xquery>
					" . $val[1] . " ;
					</xquery>\r\n";
		if ($structonly!="Yes") {
                $query = "Insert into `$val[0]` (";
				$this -> query("LOCK TABLES $val[0] WRITE");
                $qresult = $this -> query("Select * from $val[0]");
                while ($line = $this -> fetch_array($qresult)) {
                    unset($fields, $values);
					$j = 0;
                    while (list($col_name, $col_value) = each($line)) {
                        if (!is_int($col_name)) {
                            $fields .= "`$col_name`,";
							$values .= "'" . $this->escape_string($col_value) . "',";
                        } 
                    } 

                    $fields = substr($fields, 0, strlen($fields)-1);
                    $values = substr($values, 0, strlen($values)-1);
                    $myquery = $query . $fields . ") values (" . $values . ");";
                    $Dx_Create_Tables .= "\r\n<xquery>
						" . $myquery . "
						</xquery>\r\n" ;
                } 
				$this -> query("UNLOCK TABLES;");		    
		}
            } elseif (!$tbl_name_status){
				$err_msg .= "<font color=red>".$GONX["ignoredtables"]." ".$val[0]." - ".$GONX["reservedwords"].".</font><br>\n";
			}
        } 
		
		if (!is_dir($this->backupdir)) {
		    @mkdir($this->backupdir,0755);
		}
		if (sizeof($tables)==1) {
		    $prefix = "[".$tables[0]."]";
		} else $prefix = "[".sizeof($tables)."tables]";
		switch($this->compression){
			case "bz2": 
				$fname = $this->dbName."-$prefix-".date("Y-m-d H-i-s").".bz2";
				touch($this->backupdir."/".$fname);
				$fp = bzopen($this->backupdir."/".$fname, "w");
				bzwrite($fp, $Dx_Create_Tables);
				bzclose($fp);
			break;
			
		    case "zlib": 
				$fname = $this->dbName."-$prefix-".date("Y-m-d H-i-s").".gz";
				touch($this->backupdir."/".$fname);
				$fp = gzopen($this->backupdir."/".$fname, "w");
				gzwrite($fp, $Dx_Create_Tables);
				gzclose($fp);
			break;
		
			default:
				$fname = $this->dbName."-$prefix-".date("Y-m-d H-i-s").".sql";
				touch($this->backupdir."/".$fname);
				$fp = fopen($this->backupdir."/".$fname, "w");
				fwrite($fp, $Dx_Create_Tables);
				fclose($fp);
			break;
		} 
        return "<font color=red>$err_msg".$GONX["backup"]." ".$this->dbName." ".$GONX["iscorrectcreat"]." : ".$this->backupdir."/$fname</font>";
	}
	

	function generate(){
		global $GONX;
        $result =  @$this->list_tables($this->dbName);
        while ($table = @$this->fetch_row($result)) {
            $res = $this-> query("SHOW CREATE TABLE " . $this -> dbName . "." . $table[0]);

            while ($resu[] = $this -> get_data()) {
            } 
        } 
        foreach($resu as $key => $val) {
			$tbl_name_status = $this->valid_table_name($val[0]);
            if (trim($val[0]) !== "" and $tbl_name_status) {
                $Dx_Create_Tables .= "
					# Drop table '" . $val[0] . "' if exist
					<xquery>
					DROP TABLE IF EXISTS " . $val[0] . ";
					</xquery>
					# create table '" . $val[0] . "'
					<xquery>
					" . $val[1] . " ;
					</xquery>\r\n";

                $query = "Insert into `$val[0]` (";
				$this -> query("LOCK TABLES $val[0] WRITE");
                $qresult = $this -> query("Select * from $val[0]");
                while ($line = $this -> fetch_array($qresult)) {
                    unset($fields, $values);
					$j = 0;
                    while (list($col_name, $col_value) = each($line)) {
                        if (!is_int($col_name)) {
                            $fields .= "`$col_name`,";
							$values .= "'" . $this->escape_string($col_value) . "',";
                        } 
                    } 

                    $fields = substr($fields, 0, strlen($fields)-1);
                    $values = substr($values, 0, strlen($values)-1);
                    $myquery = $query . $fields . ") values (" . $values . ");";
                    $Dx_Create_Tables .= "\r\n<xquery>
						" . $myquery . "
						</xquery>\r\n" ;
                } 
				$this -> query("UNLOCK TABLES;");
            }  elseif (!$tbl_name_status){
				$err_msg .= "<font color=red>Ignored table ".$val[0]." - Reserved SQL word.</font><br>\n";
			}
        } 
		
		if (!is_dir($this->backupdir)) {
		    @mkdir($this->backupdir,octdec($this->file_mod));
		}
		switch($this->compression){
			case "bz2": 
				$fname = $this->dbName."-".date("Y-m-d H-i-s").".bz2";
				touch($this->backupdir."/".$fname);
				$fp = bzopen($this->backupdir."/".$fname, "w");
				bzwrite($fp, $Dx_Create_Tables);
				bzclose($fp);
			break;
			
		    case "zlib": 
				$fname = $this->dbName."-".date("Y-m-d H-i-s").".gz";
				touch($this->backupdir."/".$fname);
				$fp = gzopen($this->backupdir."/".$fname, "w");
				gzwrite($fp, $Dx_Create_Tables);
				gzclose($fp);
			break;
		
			default:
				$fname = $this->dbName."-".date("Y-m-d H-i-s").".sql";
				touch($this->backupdir."/".$fname);
				$fp = fopen($this->backupdir."/".$fname, "w");
				fwrite($fp, $Dx_Create_Tables);
				fclose($fp);
			break;
		} 
        return "<font color=red>$err_msg".$GONX["backup"]." ".$this->dbName." ".$GONX["iscorrectcreat"]." : ".$this->backupdir."/$fname</font>";
	}


	function import($bfile = ""){
		global $GONX,$GonxAdmin;
		set_time_limit(0);

		if (isset($_GET["importdump"])) {
		    if (is_file($this->backupdir."/".$bfile)) {
				switch($GonxAdmin["compression_default"]){
					case "bz2": 
						$bz = bzopen($this->backupdir."/".$bfile, "r");
						while (!feof($bz)) {
	  						  $contents .= bzread($bz, 4096);
						}
						bzclose($bz);
					break;
					
				    case "zlib": 
						$bz = gzopen($this->backupdir."/".$bfile, "r");
						$contents = gzread($bz, filesize($this->backupdir."/".$bfile)*1000); // just a hack coz feof doesn't wrk for me
						gzclose($bz);
					break;
				
					default:
						$bz = fopen($this->backupdir."/".$bfile, "r");
						$contents = fread($bz, filesize($this->backupdir."/".$bfile)*1000); // just a hack coz feof doesn't wrk for me
						fclose($bz);
					break;
				}
				
				$contents = str_replace("<xquery>", "", $contents);
				$contents = str_replace("</xquery>", "", $contents);

				touch($this->backupdir."/temp.sql");
				$fp = fopen($this->backupdir."/temp.sql", "w");
				fwrite($fp, $contents);
				fclose($fp); unset($contents);

				@shell_exec($GonxAdmin["mysqldump"]." --host ".$GonxAdmin["dbhost"]." --user=".$GonxAdmin["dbuser"]." --pass=".$GonxAdmin["dbpass"]." --databases ".$GonxAdmin["dbname"]." < ".$this->backupdir."/temp.sql");

				@unlink($this->backupdir."/temp.sql");
				return "<font color=red> $bfile ".$GONX["iscorrectimport"]." </font>";
			} else return FALSE;
		}

		if (is_file($this->backupdir."/".$bfile)) { // File existe, import it
			switch($GonxAdmin["compression_default"]){
				case "bz2": 
					$bz = bzopen($this->backupdir."/".$bfile, "r");
					while (!feof($bz)) {
  						  $contents .= bzread($bz, 4096);
					}
					bzclose($bz);
				break;
				
			    case "zlib": 
					$bz = gzopen($this->backupdir."/".$bfile, "r");
					$contents = gzread($bz, filesize($this->backupdir."/".$bfile)*1000); 
					gzclose($bz);
				break;
			
				default:
					$bz = fopen($this->backupdir."/".$bfile, "r");
					$contents = fread($bz, filesize($this->backupdir."/".$bfile)*1000); 
				break;
			} 

            preg_match_all("'<xquery[?>]*?>(.*?)</xquery>'si" , $contents, $requetes);
			unset($contents);
            foreach($requetes[1] as $key => $val) {
                $this -> query(trim($val));
            }
			return "<font color=red> $bfile ".$GONX["iscorrectimport"]." </font>";
		} else {	
			return false;
		}
	}
	

	function importfromfile(){
		global $GONX,$HTTP_POST_FILES;
		@set_time_limit(0);

		
		$bfile = $HTTP_POST_FILES["backupfile"];
		$pathinfo = pathinfo($bfile["name"]);
		$compression = $pathinfo["extension"];
				
		if ($bfile["error"]==0) { // File existe, import it
			switch($compression){
				case "bz2": 
					$bz = bzopen($bfile["tmp_name"], "r");
					$contents = bzread($bz, $bfile["size"]); 
					bzclose($bz);
				break;
				
			    case "gz": 
					$gz = gzopen($bfile["tmp_name"], "r");
					$contents = gzread($gz, $bfile["size"]); 
					bzclose($gz);
				break;
			
				default:
					$f = fopen($bfile["tmp_name"], "r");
					$contents = fread($f, $bfile["size"]); 
					fclose($f);
				break;
			} 
			

            preg_match_all("'<xquery[?>]*?>(.*?)</xquery>'si" , $contents, $requetes);
            foreach($requetes[1] as $key => $val) {
                $this -> query(trim($val));
            }
			return "<font color=red> ".$bfile["name"]." ".$GONX["iscorrectimport"]." </font>";
		} else {	// Erronous file, read dir, and list available backup file.
			return $this->listbackups();
		}
	}
	
	/**
	 * backup::listbackups()		List available backup
	 * 
	 * @return 
	 **/
	function listbackups(){
		global $GONX,$GonxAdmin,$page,$orderby;
		$pagesize = $GonxAdmin["pagedisplay"];
		$GonxOrder = array("Date_Descending","Date_Ascending","Name_Descending","Name_Ascending","Size_Descending","Size_Ascending");
		if ($orderby=="" or !in_array($orderby,$GonxOrder )) {
		    $orderby = $this->default_sort_order;
		}
		
		if( !isset( $page ) or ($page<=0) ){

			$page = 1;

			$from = $page-1;

			$to = ($pagesize*$page);

		} elseif ($page ==1){

			$from = 0;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -