log_file_name = "restore_" . date( "Ymd_his" ) . ".log"; ) function Execute( $param, $mode = MSR_STRING, $is_compressed = false, $split_only = false ) ( if ( $this->debug ) ( $this->saveLog( "(start reading file)" ); ) if ( $mode == MSR_FILE ) ( if (!($sql = $this->_ReadFromFile($param, $is_compressed))) ( $this->error = 'Can\'t read backup file.'; return false; ) ) else ( $sql = ($is_compressed ? gzuncompress($param) : $param); ) if ( $this->debug ) ( $this->saveLog( "(file readed)" ); ) return $this->_Restore( $sql, $split_only ); ) function _Connect() ( $value = false; if ( !$this->connected ) ( $host = $this->server . ':' . $this->port; $this->link_id = mysql_pconnect( $host, $this->username, $this->password ); ) if ( $this->link_id ) ( if ( empty( $this->database ) ) ( $value = true; ) elseif ( $this->link_id !== -1 ) ( $value = mysql_select_db($this->database, $this->link_id); ) else ( $value = mysql_select_db($this->database); ) ) if (!$value) ( $this->error = mysql_error(); ) return $value; ) function _Disconnect() ( if ( $this->link_id ) ( mysql_close( $this->link_id ); ) ) function _Query( $sql ) ( if ( $this->link_id !== -1 ) ( $result = mysql_query( $sql, $this->link_id ); ) else ( $result = mysql_query( $sql ); ) if ( !$result ) ( $this->error = mysql_error(); ) return $result; ) // The logic from phpMyAdmin source function _Decompose( &$ret, $sql ) ( $sql = rtrim( $sql, "\n\r" ); $sql_len = strlen( $sql ); $char = ''; $string_start = ''; $in_string = false; $nothing = true; $time0 = time(); for ( $i = 0; $i 0 && $sql($i - $j) == '\\' ) ( $escaped_backslash = !$escaped_backslash; $j++; ) if ( $escaped_backslash ) ( $string_start = ''; $in_string = false; break; ) else ( $i++; ) ) ) ) else if ( ($char == '-' && $sql_len > $i + 2 && $sql($i + 1) == '-' && $sql($i + 2) $i + 1 && $sql($i + 1) == '*') ) ( $comm_end = ($char == '/' ? '*/' : "\n"); $i = strpos($sql, $comm_end, $i); if ( $i === false ) ( break; ) if ($char == '/') ( $i++; ) ) else if ($char == ';') ( $ret() = array( 'query' => substr( $sql, 0, $i ), 'empty' => $nothing ); $nothing = true; $sql = ltrim(substr($sql, min($i + 1, $sql_len))); $sql_len = strlen($sql); if ( $sql_len ) ( $i = -1; ) else ( return true; ) ) else if (($char == '"') || ($char == '\'') || ($char == '`')) ( $in_string = true; $nothing = false; $string_start = $char; ) elseif ($nothing) ( $nothing = false; ) $time1 = time(); if ($time1 >= $time0 + 30) ( $time0 = $time1; @header('X-pmaPing: Pong'); ) ) if (!empty($sql) && preg_match('@(^(:space:))(email protected)', $sql)) ( $ret() = array('query' => $sql, 'empty' => $nothing); ) return true; ) function _Restore($sql, $split_only) ( if ( $this->debug ) ( $this->saveLog( "(start restoring)" ); ) if ( $this->debug ) ( $this->saveLog( "(connecting to DB… )" ); ) if (!$this->_Connect()) ( return false; ) if ( $this->debug ) ( $this->saveLog( "(connected to DB)" ); ) if ( $this->debug ) ( $this->saveLog( "(decomposing… )" ); ) $queries = array(); $errors = ''; // check if is this our backup if ( strpos( $sql, __SEP__ ) !== false ) ( if ( $this->debug ) ( $this->saveLog( "(founding our backup file)" ); ) $queries = explode( __SEP__, $sql ); if ( count( $queries ) ) ( if ( $this->debug ) ( $this->saveLog( "(decomposed)" ); ) if (!$split_only) ( foreach ($queries as $query) ( $query = trim( $query ); if ( !empty( $query ) ) ( if (!$this->_Query( $query ) ) ( $errors .= $this->error . '
'; ) if ( $this->debug ) ( $this->saveLog( $query ); ) ) ) ) ) ) else ( if ( $this->debug ) ( $this->saveLog( "(common sql file founded)" ); ) if (!$this->_Decompose( $queries, $sql ) ) ( return false; ) if ( $this->debug ) ( $this->saveLog( "(decomposed)" ); ) foreach ($queries as $query) ( if (!$split_only) ( if (!$this->_Query( trim( $query('query') ) ) ) ( $errors .= $this->error . '
'; ) ) if ( $this->debug ) ( $this->saveLog( $query('query') ); ) ) ) if ( $this->debug ) ( $this->saveLog( "(finished restoring)" ); ) $this->_Disconnect(); if ( !empty( $errors ) ) ( $this->error = $errors; return false; ) return true; ) function _ReadFromFile($fname, $is_compressed) ( if ($is_compressed) ( $sql = gzfile($fname); ) else ( $sql = file($fname); ) if ($sql === false) ( return false; ) return implode('', $sql); ) function saveLog( $str ) ( $f = @fopen( $this->log_folder . $this->log_file_name, "a" ); @fwrite( $f, "(" . date( "H:i:s" ). ") " . $str . "\n" ); @fclose( $f ); ) ) ?>