Вход Регистрация
Файл: pma/lib/phpMyDumper.php
Строк: 283
<?php
/*
* phpMyDumper
* -------------
* Version: 1.10
* Copyright (c) 2009 by Micky Holdorf
* Holdorf.dk/Software - micky.holdorf@gmail.com
* GNU Public License http://opensource.org/licenses/gpl-license.php
*
* -------------------------------------------
* Aug 2012
* upgraded to mysqli by ionutvmi@gmail.com
* modified to fit wap phpmyadmin
*/

class phpMyDumper {
    
/**
    * @access private
    */
    
var $database null;
    var 
$compress null;
    var 
$hexValue null;
    var 
$dropTable null;
    var 
$createTable null;
    var 
$tableData null;
    var 
$expInsert null;
    var 
$phpMyAdmin null;
    var 
$utf8 null;
    var 
$autoincrement null;

    var 
$filename null;
    var 
$file null;
    var 
$filestream null;
    var 
$outputTofile false;
    var 
$isWritten false;
    var 
$tables = array();
    var 
$rds false;
    var 
$query false;

    
/**
    * Class constructor
    * @param string $db The database name
    * @param string $connection The database connection handler
    * @param boolean $compress It defines if the output/import file is compressed (gzip) or not
    * @param string $filepath The file where the dump will be written
    */
    
function phpMyDumper($dbn=null$filepath='dump.php'$compress=false$tables=false$rds=false,$query=false) {
        
$this->compress $compress;
        
$this->tables $tables;
        
$this->rds $rds;
        
$this->query $query;

        
$this->hexValue false;
        
$this->dropTable true;
        
$this->createTable false;
        
$this->tableData false;
        
$this->expInsert false;
        
$this->phpMyAdmin true;
        
$this->utf8 true;
        
$this->autoincrement false;

        
$this->outputTofile = ( $filepath!='' ) ? true false;
        if ( 
$this->outputTofile && !$this->setOutputFile($filepath) ) {
            
//if filepath is null, then we want stream
            
return false;
        }

        return 
$this->setDatabase($dbn);
    }

    
/**
    * Sets the database to work on
    * @param string $db The database name
    */
    
function setDatabase($dbn){
    global 
$db;
        
$this->database $dbn;
        if ( !
$db->select_db($this->database) )
            return 
false;
        return 
true;
      }

    
/**
    * Sets the output file
    * @param string $filepath The file where the dump will be written
    */
    
function setOutputFile($filepath) {
        if ( 
$this->isWritten )
            return 
false;
        echo 
"Creating file '".$filepath."': ";
        
$this->filename $filepath;
        
$this->file $this->openFile($this->filename);
        echo 
" DONE!n";
        return 
$this->file;
      }
    
    
/**
     * Writes to file all the selected database tables structure with SHOW CREATE TABLE
    * @param string $table The table name
    */
    
function getTableStructure($table) {
    global 
$db;
        
// Header
        
$structure "n-- --------------------------------------------------------n";
        
$structure .= "-- n";
        
$structure .= "-- Table structure for table ".PMA_bkq($table)."n";
        
$structure .= "-- nn";

        
// Dump Structure
        
if ( $this->dropTable )
            
$structure .= "DROP TABLE IF EXISTS ".PMA_bkq($table).";n";
        
$records $db->query("SHOW CREATE TABLE ".PMA_bkq($table));
        if ( 
$records->num_rows == )
            return 
false;
        while ( 
$record $records->fetch_assoc() ) {
            
$structure .= $record['Create Table'];
        }
        
$records $db->query("SHOW TABLE STATUS LIKE '".$db->real_escape_string($table)."'");
        while ( 
$row $records->fetch_assoc() ) {
            if (
$this->autoincrement AND $row['Name']==$table AND $row['Auto_increment']!='') {
                
$structure .= " AUTO_INCREMENT=".$row['Auto_increment'];
            }
        }
        
$structure .= ";n";
        
$this->saveToFile($this->file,$structure);
      }

    
/**
    * Writes to file the $table's data
    * @param string $table The table name
    * @param boolean $hexValue It defines if the output is base 16 or not
    */
    
function getTableData($table,$hexValue true) {
    global 
$db;
        
// Header
        
$data "n-- --------------------------------------------------------n";
        
$data .= "-- n";
        
$data .= "-- Dumping data for table ".PMA_bkq($table)."n";
        
$data .= "-- nn";
        
$data1$data;
            
        
// Field names
        
if ($this->expInsert || $this->hexValue) {
            
$records $db->query("SHOW FIELDS FROM ".PMA_bkq($table));
            
$num_fields $records->num_rows;
            if ( 
$num_fields == )
                return 
false;
            
$hexField = array();

            
$insertStatement "INSERT INTO ".PMA_bkq($table)." (";
            
$selectStatement "SELECT ";
            for (
$x 0$x $num_fields$x++) {
                
$record mysqli_fetch_assoc($records);
                if ( (
$hexValue) && ($this->isTextValue($record['Type'])) ) {
                    
$selectStatement .= 'HEX(`'.$record['Field'].'`)';
                    
$hexField [$x] = true;
                }
                else
                    
$selectStatement .= '`'.$record['Field'].'`';
                
                
$insertStatement .= '`'.$record['Field'].'`';
                
$insertStatement .= ", ";
                
$selectStatement .= ", ";
                
            }
            
$insertStatement = @substr($insertStatement,0,-2).') VALUES';
            
$selectStatement = @substr($selectStatement,0,-2).' FROM `'.$table.'`';
        }
        
        if (!
$this->expInsert)
            
$insertStatement "INSERT INTO ".PMA_bkq($table)." VALUES";
        
        if (!
$this->hexValue)
            
$selectStatement "SELECT * FROM ".PMA_bkq($table)." ".$this->rds;
            
        if (
$this->query){
            
$selectStatement $this->query;
            
$insertStatement "INSERT INTO ".PMA_bkq($table)." ";
            }
        
// Dump data
        
$records $db->query($selectStatement);
        
$num_rows $records->num_rows;
        
$num_fields $records->field_count;
        
        while(
$_f $records->fetch_field()){
            
$_fields[] = PMA_bkq($_f->name);
        }
        
$procent 0;
        for (
$i 1$i <= $num_rows$i++) {
            
$data .= $insertStatement;
            
$record $records->fetch_assoc();
            
$data .= ' (';
            
$data2 .= ' (';
            for (
$j 0$j $num_fields$j++) {
                
$field_name $records->fetch_field_direct($j);
                
$field_name $field_name->name;
                if (
is_null($record[$field_name])) {
                     
$data .= "NULL";
                     
$data2 .= "NULL";
                } 
                else {
                    if ( isset(
$hexField[$j]) && (@strlen($record[$field_name]) > 0) ) {
                        
$data .= "0x".$record[$field_name];
                        
$data2 .= "0x".$record[$field_name];
                    }
                    else {
                        
$data .= '''.@str_replace('"','"',$db->real_escape_string($record[$field_name])).''';
                        
$data2 .= '''.@str_replace('"','"',$db->real_escape_string($record[$field_name])).''';
                    }
                }
                
$data .=  ',';
                
$data2 .=  ',';
            }
            if (
$this->query){
                
$data = (!$y $data1 "").$insertStatement."(".implode(",",$_fields).") VALUES ".$data2;
                
$y=1;
            }
             
            
$data = @substr($data,0,-1).");n";

            
$this->saveToFile($this->file,$data);
            
// cleaning searvice :)
            
$data $data1 $data2 '';
        }
    }

     
/**
    * Writes to file all the selected database tables structure
    * @return boolean
    */
    
function getDatabaseStructure() {
    global 
$db;
        
$records $db->query('SHOW TABLES');
        if ( 
$records->num_rows == )
            return 
false;
        while ( 
$record $records->fetch_row() ) {
            echo 
"Exporting table structure for '".$record[0]."': ";
            
$this->getTableStructure($record[0]);
            echo 
" DONE!n";
        }
        return 
true;
     }

    
/**
    * Writes to file all the selected database tables data
    * @param boolean $hexValue It defines if the output is base-16 or not
    */
    
function getDatabaseData($hexValue true) {
    global 
$db;
        
$records $db->query('SHOW TABLES');
        if ( 
$records->num_rows == )
            return 
false;
        while ( 
$record $records->fetch_row() ) {
            if (
$this->filename) echo "Exporting table data for '".$record[0]."': ";
            
$this->getTableData($record[0],$hexValue);
            if (
$this->filename) echo " DONE!n";
        }
      }

    
/**
    * Writes to file all the selected database tables data
    * @param boolean $hexValue It defines if the output is base-16 or not
    */
    
function getDatabaseStructureData($hexValue true){
    global 
$db;
        
$records $db->query('SHOW TABLES');
        if ( 
$records->num_rows == )
            return 
false;
        while ( 
$record $records->fetch_row() ) {
            if((
in_array($record[0],$this->tables) && $this->tables != false) || $this->tables == false){ 
                if ( 
$this->createTable) {
                    if (
$this->filename) echo "Exporting table structure for '".$record[0]."': ";
                    
$this->getTableStructure($record[0]);
                    if (
$this->filename) echo " DONE!n";
                }
                if ( 
$this->tableData) {
                    if (
$this->filename) echo "Exporting table data for '".$record[0]."': ";
                    
$this->getTableData($record[0],$hexValue);
                    if (
$this->filename) echo " DONE!n";
                }
            }
        }
// end while
      
}

    
/**
    * Writes the selected database to file 
    */
    
function doDump($doDB false,$i=1) {
    global 
$db$pma;
        if ( !
$this->setDatabase($this->database) )
            return 
false;

        if ( 
$this->utf8 ) {
            
$encoding $db->query("SET NAMES 'utf8'");
        }
        if(
$i<2) {
            
$cur_time=date("Y-m-d H:i");
            
$server_info $db->get_server_info();
            
$this->saveToFile($this->file,"-- Wap PhpMyAdmin $pma->versionn");
            
$this->saveToFile($this->file,"-- http://master-land.net/phpmyadmin n");
            
$this->saveToFile($this->file,"-- Generation Time: $cur_timen");
            
$this->saveToFile($this->file,"-- MySQL Server Version: $server_infon");
            
$this->saveToFile($this->file,"-- PHP Version: ".phpversion()."nn");
        }
        if(
$doDB) {
            
$this->saveToFile($this->file,"-- --------------------------------------------------------n--n-- Database: ".PMA_bkq($this->database)."n-- n");
            
$create_query "CREATE DATABASE ".PMA_bkq($this->database);
            
$collation=$db->query('SELECT DEFAULT_COLLATION_NAME FROM information_schema.SCHEMATA WHERE SCHEMA_NAME = '' . $db->real_escape_string($this->database) . '' LIMIT 1')->fetch_row();
            
$collation $collation[0];
            if (
strpos($collation'_')) {
            
$create_query .= ' DEFAULT CHARACTER SET ' substr($collation0strpos($collation'_')) . ' COLLATE ' $collation;
            } else {
            
$create_query .= ' DEFAULT CHARACTER SET ' $collation;
            }
            
$create_query.=";nUSE ".PMA_bkq($this->database).";nn";
            
$this->saveToFile($this->file,$create_query);
        }else {
            
$this->saveToFile($this->file,"-- Database: ".PMA_bkq($this->database)."nn");
        }

        if (
$this->phpMyAdmin) {
            
$this->getDatabaseStructureData($this->hexValue);
        }
        else {    
            if ( 
$this->createTable )
                
$this->getDatabaseStructure();
            if ( 
$this->tableData )
                
$this->getDatabaseData($this->hexValue);
        }
        
        if (
$this->outputTofile){
            
$this->closeFile($this->file);
            return 
true;
        }
        else {
            return 
$this->filestream;
        }
    }

     
/**
    * @access private
    */
    
function isTextValue($field_type) {
        switch (
$field_type) {
            case 
"tinytext":
            case 
"text":
            case 
"mediumtext":
            case 
"longtext":
            case 
"binary":
            case 
"varbinary":
            case 
"tinyblob":
            case 
"blob":
            case 
"mediumblob":
            case 
"longblob":
                return 
True;
                break;
            default:
                return 
False;
        }
    }
    
    
/**
    * @access private
    */
    
function openFile($filename) {
        
$file false;
        if ( 
$this->compress )
            
$file = @gzopen($filename"w9");
        else
            
$file = @fopen($filename"w");
        return 
$file;
    }

    
/**
    * @access private
    */
    
function saveToFile($file$data) {
        if (
$this->outputTofile){
            if ( 
$this->compress )
                @
gzwrite($file$data);
            else
                @
fwrite($file$data);
            
$this->isWritten true;
        }
        else {
            
$this->saveToStream($data);
        }
    }

    
/**
    * @access private
    */
    
function saveToStream($data) {
        
$this->filestream .= $data;
    }
    
    
/**
    * @access private
    */
    
function closeFile($file) {
        if ( 
$this->compress )
            @
gzclose($file);
        else
            @
fclose($file);
    }
}
?>
Онлайн: 0
Реклама