- 정의('MSB_VERSION', '1.0.0');
- 정의('MSB_NL', "rn" );
- 정의('MSB_STRING', 0);
- 정의('MSB_DOWNLOAD', 1);
- 정의('MSB_SAVE', 2);
- 정의('__SEP__', "/*sep*/" );
- set_time_limit( 600 );
- class MySQL_Backup {
- var $server = 'localhost';
- var $port = 3306;
- var $username = 'root';
- var $password = '';
- var $database = '';
- var $link_id = -1;
- var $connected = false;
- var $tables = array();
- var $drop_tables = true;
- var $struct_only = false;
- var $comments = true;
- var $backup_dir = '';
- var $fname_format = 'd_m_y__H_i_s';
- var $error = '';
- var $complete_inserts = false;
- var $inserts_block = 200;
- function Execute($task = MSB_STRING, $fname = '', $compress = false) {
- if ( !( $sql = $this->_Retrieve() ) ) {
- return false;
- }
- if ( $task == MSB_SAVE ) {
- if (empty($fname)) {
- $fname = $this->backup_dir;
- $fname .= date($this->fname_format);
- $fname .= ($압축 ? '.sql.gz' : '.sql');
- }
- return $this->_SaveToFile($fname, $sql, $compress);
- } elseif ($task == MSB_DOWNLOAD) {
- if ( 비어 있음( $fname ) ) {
- $fname = date($this->fname_format);
- $fname .= ($compress ? '.sql.gz' : '.sql ');
- }
- return $this->_DownloadFile($fname, $sql, $compress);
- } else {
- return $sql;
- }
- }
-
- function _Connect() {
- $value = false;
- if (!$this->connected) {
- $host = $this->server . ':' . $this->port;
- $this->link_id = mysql_connect($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 _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;
- }
-
- function _GetTables() {
- $value = array();
- if ( !( $result = $this->_Query('SHOW TABLES') ) ) {
- return false;
- }
- while ( $row = mysql_fetch_row( $result ) ) {
- if ( 비어 있음( $this->tables) || in_array( $row[0], $this->tables ) ) {
- $value[] = $row[0];
- }
- }
- if (!sizeof($value) ) {
- $this->error = '데이터베이스에서 테이블을 찾을 수 없습니다.';
- return false;
- }
- return $value;
- }
-
- function _DumpTable ( $table ) {
- $value = '';
- $this->_Query( 'LOCK TABLES ' . $table . ' WRITE' );
- if ( $this->comments ) {
- $값 .= '#' . MSB_NL;
- $value .= '# 테이블의 테이블 구조 `' . $테이블 . ''' . MSB_NL;
- $value .= '#' . MSB_NL . MSB_NL;
- }
- if ( $this->drop_tables ) {
- $value .= 'DROP TABLE IF EXISTS `' . $테이블 . '``;' . __9월__ . MSB_NL;
- }
- if ( !( $result = $this->_Query('SHOW CREATE TABLE ' . $table) ) ) {
- return false;
- }
- $row = mysql_fetch_assoc($result);
- $value .= str_replace("n", MSB_NL, $row['Create Table']) . ';' . __SEP__;
- $값 .= MSB_NL . MSB_NL;
- if (!$this->struct_only) {
- if ($this->comments) {
- $value .= '#' . MSB_NL;
- $value .= '# `' 테이블에 대한 데이터를 덤프하는 중입니다. $테이블 . ''' . MSB_NL;
- $value .= '#' . MSB_NL . MSB_NL;
- }
- $value .= $this->_GetInserts($table);
- }
- $value .= MSB_NL . MSB_NL;
- $this->_Query('UNLOCK TABLES');
- return $value;
- }
-
- function _GetInserts($table) {
- $value = '' ;
- if (!($result = $this->_Query('SELECT * FROM ' . $table))) {
- return false;
- }
- if ( $this-> Complete_inserts ) {
- while ($row = mysql_fetch_row($result)) {
- $values = '';
- foreach ($row as $data) {
- $values .= ''' . addlashes($data) . '', ';
- }
- $values = substr($values, 0, -2);
- $value .= 'INSERT INTO ' . $테이블 . ' VALUES (' . $values . ');' . __9월__ . MSB_NL;
- }
- } else {
- $blocks_counter = 0;
- $blocks = array();
- while ($row = mysql_fetch_row($result)) {
- $values = array();
- foreach ($row를 $data로) {
- $values[] = ''' . addlashes($data) . ''';
- }
- $blocks[] = '(' . implode( ',', $values ) . ')';
-
- if ( $blocks_counter < $this-> ;inserts_block ) {
- $blocks_counter ;
- } else {
- $value .= 'INSERT INTO' . $테이블 . '가치'. implode( ',', $blocks ) . ";" . __9월__ . MSB_NL;
- $blocks = array();
- $blocks_counter = 0;
- }
- }
- if ( count( $blocks ) ) {
- $value .= 'INSERT INTO ' . $테이블 . '가치'. implode( ',', $blocks ) . ";" . __9월__ . MSB_NL;
- }
- }
- return $value;
- }
- function _Retrieve() {
- $value = '';
- if (!$this- >_Connect()) {
- return false;
- }
- if ($this->comments) {
- $value .= '#' . MSB_NL;
- $value .= '# MySQL 데이터베이스 덤프' . MSB_NL;
- $value .= '# MySQL_Backup 클래스에 의해 생성됨, ver. ' . MSB_버전. MSB_NL;
- $value .= '#' . MSB_NL;
- $value .= '# 호스트: ' . $this->서버 . MSB_NL;
- $value .= '# 생성됨: ' . date('M j, Y') . ' 에 ' . 날짜('H:i') . MSB_NL;
- $value .= '# MySQL 버전: ' . mysql_get_server_info() . MSB_NL;
- $value .= '# PHP 버전: ' . php버전() . MSB_NL;
- if (!empty($this->database)) {
- $value .= '#' . MSB_NL;
- $value .= '# 데이터베이스: `' . $this->데이터베이스 . ''' . MSB_NL;
- }
- $value .= '#' . MSB_NL . MSB_NL . MSB_NL;
- }
- if (!($tables = $this->_GetTables())) {
- return false;
- }
- foreach ($tables as $table) {
- if (!($table_dump = $this->_DumpTable($table))) {
- $this->error = mysql_error();
- return false;
- }
- $ value .= $table_dump;
- }
- return $value;
- }
-
- function _SaveToFile($fname, $sql, $compress) {
- if ($compress) {
- if (!($zf = gzopen($fname, 'w9'))) {
- $this->error = '출력 파일을 생성할 수 없습니다.';
- return false;
- }
- gzwrite($zf, $sql);
- gzclose($zf);
- } else {
- if (!($f = fopen($fname, 'w'))) {
- $this->error = '출력 파일을 생성할 수 없습니다.';
- return false;
- }
- fwrite($f, $sql);
- fclose($ f);
- }
- true를 반환합니다.
- }
-
- function _DownloadFile($fname, $sql, $compress) {
- header('콘텐츠 처리: 파일 이름=' . $fname);
- header('콘텐츠 유형: 애플리케이션/옥텟스트림 ');
- header('Pragma: no-cache');
- header('Expires: 0');
- echo ($compress ? gzencode($sql) : $sql);
- return true;
- }
- }
-
- ?>
复代码
|