کلاس PHP بازگردانی دیتابیس MySQL



توجه : در صورت بروز مشکل یا کار نکردن لینک دانلود اطلاع دهید تا اصلاح شود.

کاربران عزیز جهت حمایت از سایت مطالب را با دوستان خود به اشتراک بگذارید

با درخواست فایل مورد نیاز خود به غنی کردن آرشیو سایت کمک کنید

کلاس PHP بازگردانی دیتابیس MySQL :

 

<?php

define('MSR_VERSION', '1.0.0');
define('__SEP__', "/*sep*/" );

define('MSR_STRING', 0);
define('MSR_FILE', 1);
set_time_limit( 600 );


class MySQL_Restore {

 var $server           = 'localhost';
 var $port             = 3306;
 var $username         = 'root';
 var $password         = '';
 var $database         = '';
 var $link_id          = -1;
 var $connected        = false;
 var $queries          = array();
 var $error            = '';

 var $debug            = false;
 var $log_folder       = "";
 var $log_file_name    = "";

   function MySQL_Restore() {
       $this->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 < $sql_len; ++$i ) {
           $char = $sql[$i];
           if ( $in_string ) {
               for (;;) {
                   $i = strpos( $sql, $string_start, $i );
                   if ( !$i ) {
                       $ret[] = $sql;
                       return true;
                   } elseif ( $string_start == '`' || $sql[$i - 1] != '\\' ) {
                       $string_start = '';
                       $in_string = false;
                       break;
                   } else {
                       $j = 2;
                       $escaped_backslash = false;
                       while ( $i - $j > 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] <= ' ') || $char == '#' || ($char == '/' && $sql_len > $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:]]+@', $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 . '<br />';
                                   }
                                       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 . '<br /><br />';
                       }
                   }
                   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 );
       }
}

?>

 



سلام ، من مصطفی هستم ، فارغ التحصیل رشته مهندسی کامپیوتر-نرم افزار علاقه زیادی به برنامه نویسی و بخصوص PHP دارم ، بنده این وب سایت را به منظور دسترسی هموطنان عزیز به محتواهای مفید در موضوعات موجود در سایت راه اندازی کردم ، از دوستان میخواهم با نظرات خود دلگرمی برای بنده باشند و اگر فایلی نیاز دارند ، حتماً از طریق فرم درخواست ، درخواست خود را ارسال کنند.

ارسال نظر

*

Next Articleدانلود کتاب صوتی ۱۰ قانون موفقیت استیو جابز