Προς το περιεχόμενο

Export my base/Php


Προτεινόμενες αναρτήσεις

Δημοσ.

Αφου εκτελείς μέσω της κλησης system τη mysqldump το τελικό αρχείο .sql θα αποθηκευτει στο path του χρήστη που εκτελει την εντολή. Ε η php προφανώς δεν έχει στο include_path το path που είναι αποθηκευμένο το αρχείο κ δε θα το βρίσκει. Εσυ πρέπει να αποθηκευσεις το αρχείο σε ένα κατάλογο που θα μπορει ο interpeter της php να το βρει. Να είναι δηλαδη μέσα στο include_path της php. Αυτο σα πρώτο hint.

  • Like 1
Δημοσ.

Αυτό που πρέπει να κάνεις λέγεται debugging, χωρίς να ελέγξεις τι συμβαίνει στο πρόγραμμα την ώρα που τρέχει μόνο σούπερ απλά προβλήματα λύνονται.

 

Ίσως είναι η ώρα, αλλά προσωπικά δε βλέπω κάτι άμεσα στραβό στον κώδικα. Ναι, έχει relative paths αλλά τι σημασία έχει αυτό; Στο ίδιο (working) directory που τα πετάει π.χ. η mysqldump θα πάει να τα βρει και η π.χ. readfile. Αν ήταν absolute τι θα άλλαζε δηλαδή;

Δημοσ.

Δοκιμασε αυτο
 

 

 

<?php
/**
 * This file contains the Backup_Database class wich performs
 * a partial or complete backup of any given MySQL database
 * @author Daniel López Azaña <http://www.daniloaz.com-->
 * @version 1.0
 */

// Report all errors
error_reporting(E_ALL);

/**
 * Define database parameters here
 */
define("DB_USER", '');
define("DB_PASSWORD", '');
define("DB_NAME", '');
define("DB_HOST", 'localhost');
define("OUTPUT_DIR", 'backup'); //Where to save
define("TABLES", '*');//Leave it as it is

/**
 * Instantiate Backup_Database and perform backup
 */
$backupDatabase = new Backup_Database(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
$status = $backupDatabase->backupTables(TABLES, OUTPUT_DIR) ? 'OK' : 'KO';
echo "


Backup result: ".$status;

/**
 * The Backup_Database class
 */
class Backup_Database {
    /**
     * Host where database is located
     */
    var $host = '';

    /**
     * Username used to connect to database
     */
    var $username = '';

    /**
     * Password used to connect to database
     */
    var $passwd = '';

    /**
     * Database to backup
     */
    var $dbName = '';

    /**
     * Database charset
     */
    var $charset = '';

    /**
     * Constructor initializes database
     */
    function Backup_Database($host, $username, $passwd, $dbName, $charset = 'utf8')
    {
        $this->host     = $host;
        $this->username = $username;
        $this->passwd   = $passwd;
        $this->dbName   = $dbName;
        $this->charset  = $charset;

        $this->initializeDatabase();
    }

    protected function initializeDatabase()
    {
        $conn = mysql_connect($this->host, $this->username, $this->passwd);
        mysql_select_db($this->dbName, $conn);
        if (! mysql_set_charset ($this->charset, $conn))
        {
            mysql_query('SET NAMES '.$this->charset);
        }
    }

    /**
     * Backup the whole database or just some tables
     * Use '*' for whole database or 'table1 table2 table3...'
     * @param string $tables
     */
    public function backupTables($tables = '*', $outputDir = '.')
	
    {
        try
        {
            /**
            * Tables to export
            */
            if($tables == '*')
            {
                $tables = array();
                $result = mysql_query('SHOW TABLES');
                while($row = mysql_fetch_row($result))
                {
                    $tables[] = $row[0];
                }
            }
            else
            {
                $tables = is_array($tables) ? $tables : explode(',',$tables);
				
            }
	

            $sql =  '-- phpMyAdmin SQL Dump
-- version 4.1.14
-- http://www.phpmyadmin.net
--
-- Φιλοξενητής: 127.0.0.1
-- Ξ§ΟΟΞ½ΞΏΟ‚ δημιουΟΞ³Ξ―Ξ±Ο‚: 27 Ιαν 2015 στις 15:30:23
-- Ξκδοση διακομιστή: 5.6.17
-- Ξκδοση PHP: 5.5.12

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";


/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
';'CREATE DATABASE IF NOT EXISTS '.$this->dbName.";\n\n";
            $sql .= 'USE '.$this->dbName.";\n\n";

            /**
            * Iterate tables
            */
            foreach($tables as $table)
            {
                echo "Backup ".$table." Table...";

                $result = mysql_query('SELECT * FROM '.$table);
                $numFields = mysql_num_fields($result);

                $sql .= 'DROP TABLE IF EXISTS '.$table.';';
                $row2 = mysql_fetch_row(mysql_query('SHOW CREATE TABLE '.$table));
                $sql.= "\n\n".$row2[1].";\n\n";

                for ($i = 0; $i < $numFields; $i++) 
                {
                    while($row = mysql_fetch_row($result))
                    {
                        $sql .= 'INSERT INTO `'.$table.'` VALUES(';
                        for($j=0; $j<$numFields; $j++) 
                        {
                            $row[$j] = addslashes($row[$j]);
                            $row[$j] = ereg_replace("\n","\\n",$row[$j]);
                            if (isset($row[$j]))
                            {
                                $sql .= '"'.$row[$j].'"' ;
                            }
                            else
                            {
                                $sql.= '""';
                            }

                            if ($j < ($numFields-1))
                            {
                                $sql .= ',';
                            }
                        }

                        $sql.= ");\n";
                    }
                }

                $sql.="\n\n\n";

                echo " OK" . "
";
            }
        }
        catch (Exception $e)
        {
            var_dump($e->getMessage());
            return false;
        }

        return $this->saveFile($sql, $outputDir);
    }

    /**
     * Save SQL to file
     * @param string $sql
     */
    protected function saveFile(&$sql, $outputDir = '.')
    {
        if (!$sql) return false;

        try
        {
            $handle = fopen($outputDir.'/'.$this->dbName.'-'.date("d-m-Y").'.sql','w+');
            fwrite($handle, $sql);
            fclose($handle);
        }
        catch (Exception $e)
        {
            var_dump($e->getMessage());
            return false;
        }

        return true;
    }
}
?>

 

 

Δημοσ.

Δοκιμασε αυτο

 

 

 

<?php
/**
 * This file contains the Backup_Database class wich performs
 * a partial or complete backup of any given MySQL database
 * @author Daniel López Azaña <http://www.daniloaz.com-->
 * @version 1.0
 */

// Report all errors
error_reporting(E_ALL);

/**
 * Define database parameters here
 */
define("DB_USER", '');
define("DB_PASSWORD", '');
define("DB_NAME", '');
define("DB_HOST", 'localhost');
define("OUTPUT_DIR", 'backup'); //Where to save
define("TABLES", '*');//Leave it as it is

/**
 * Instantiate Backup_Database and perform backup
 */
$backupDatabase = new Backup_Database(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
$status = $backupDatabase->backupTables(TABLES, OUTPUT_DIR) ? 'OK' : 'KO';
echo "


Backup result: ".$status;

/**
 * The Backup_Database class
 */
class Backup_Database {
    /**
     * Host where database is located
     */
    var $host = '';

    /**
     * Username used to connect to database
     */
    var $username = '';

    /**
     * Password used to connect to database
     */
    var $passwd = '';

    /**
     * Database to backup
     */
    var $dbName = '';

    /**
     * Database charset
     */
    var $charset = '';

    /**
     * Constructor initializes database
     */
    function Backup_Database($host, $username, $passwd, $dbName, $charset = 'utf8')
    {
        $this->host     = $host;
        $this->username = $username;
        $this->passwd   = $passwd;
        $this->dbName   = $dbName;
        $this->charset  = $charset;

        $this->initializeDatabase();
    }

    protected function initializeDatabase()
    {
        $conn = mysql_connect($this->host, $this->username, $this->passwd);
        mysql_select_db($this->dbName, $conn);
        if (! mysql_set_charset ($this->charset, $conn))
        {
            mysql_query('SET NAMES '.$this->charset);
        }
    }

    /**
     * Backup the whole database or just some tables
     * Use '*' for whole database or 'table1 table2 table3...'
     * @param string $tables
     */
    public function backupTables($tables = '*', $outputDir = '.')
	
    {
        try
        {
            /**
            * Tables to export
            */
            if($tables == '*')
            {
                $tables = array();
                $result = mysql_query('SHOW TABLES');
                while($row = mysql_fetch_row($result))
                {
                    $tables[] = $row[0];
                }
            }
            else
            {
                $tables = is_array($tables) ? $tables : explode(',',$tables);
				
            }
	

            $sql =  '-- phpMyAdmin SQL Dump
-- version 4.1.14
-- http://www.phpmyadmin.net
--
-- Φιλοξενητής: 127.0.0.1
-- Ξ§ΟΟΞ½ΞΏΟ‚ δημιουΟΞ³Ξ―Ξ±Ο‚: 27 Ιαν 2015 στις 15:30:23
-- Ξκδοση διακομιστή: 5.6.17
-- Ξκδοση PHP: 5.5.12

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";


/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
';'CREATE DATABASE IF NOT EXISTS '.$this->dbName.";\n\n";
            $sql .= 'USE '.$this->dbName.";\n\n";

            /**
            * Iterate tables
            */
            foreach($tables as $table)
            {
                echo "Backup ".$table." Table...";

                $result = mysql_query('SELECT * FROM '.$table);
                $numFields = mysql_num_fields($result);

                $sql .= 'DROP TABLE IF EXISTS '.$table.';';
                $row2 = mysql_fetch_row(mysql_query('SHOW CREATE TABLE '.$table));
                $sql.= "\n\n".$row2[1].";\n\n";

                for ($i = 0; $i < $numFields; $i++) 
                {
                    while($row = mysql_fetch_row($result))
                    {
                        $sql .= 'INSERT INTO `'.$table.'` VALUES(';
                        for($j=0; $j<$numFields; $j++) 
                        {
                            $row[$j] = addslashes($row[$j]);
                            $row[$j] = ereg_replace("\n","\\n",$row[$j]);
                            if (isset($row[$j]))
                            {
                                $sql .= '"'.$row[$j].'"' ;
                            }
                            else
                            {
                                $sql.= '""';
                            }

                            if ($j < ($numFields-1))
                            {
                                $sql .= ',';
                            }
                        }

                        $sql.= ");\n";
                    }
                }

                $sql.="\n\n\n";

                echo " OK" . "
";
            }
        }
        catch (Exception $e)
        {
            var_dump($e->getMessage());
            return false;
        }

        return $this->saveFile($sql, $outputDir);
    }

    /**
     * Save SQL to file
     * @param string $sql
     */
    protected function saveFile(&$sql, $outputDir = '.')
    {
        if (!$sql) return false;

        try
        {
            $handle = fopen($outputDir.'/'.$this->dbName.'-'.date("d-m-Y").'.sql','w+');
            fwrite($handle, $sql);
            fclose($handle);
        }
        catch (Exception $e)
        {
            var_dump($e->getMessage());
            return false;
        }

        return true;
    }
}
?>

 

 

Φίλε έχω αλλάξει την mysql σε pdo_mysql συνδέθηκα κανονικά αλλά σε αυτό το σημείο

 public function backupTables($conn,$tables = '*', $outputDir = '.')
    
    {
        try
        {
            /**
            * Tables to export
            */
            if($tables == '*')
            {

                $tables = array();

                $result = $conn->query("show tables");
    
                while ($row = $result->fetch()) {
                    echo ($row[0]);
                }
            }
            else
            {
                $tables = is_array($tables) ? $tables : explode(',',$tables);
                
            } 

 η γραμμή $result = $conn->query("show tables"); δεν δουλεύει για κάποιο λόγο και δεν μπορώ να καταλάβω το γιατί...

Δημοσ.

Φίλε έχω αλλάξει την mysql σε pdo_mysql συνδέθηκα κανονικά αλλά σε αυτό το σημείο

 public function backupTables($conn,$tables = '*', $outputDir = '.')
    
    {
        try
        {
            /**
            * Tables to export
            */
            if($tables == '*')
            {

                $tables = array();

                $result = $conn->query("show tables");
    
                while ($row = $result->fetch()) {
                    echo ($row[0]);
                }
            }
            else
            {
                $tables = is_array($tables) ? $tables : explode(',',$tables);
                
            }
η γραμμή $result = $conn->query("show tables"); δεν δουλεύει για κάποιο λόγο και δεν μπορώ να καταλάβω το γιατί...

δωσε μου των κώδικα σου άμα θες να κάνω και γω καμιά δοκιμή.

Δημοσ.
<?php
// Report all errors
error_reporting(E_ALL);

/**
 * Define database parameters here
 */
define("DB_USER", '');
define("DB_PASSWORD", '');
define("DB_NAME", '');
define("DB_HOST", 'localhost');
define("OUTPUT_DIR", 'backup'); //Where to save
define("TABLES", '*');//Leave it as it is


/**
 * Instantiate Backup_Database and perform backup
 */
$backupDatabase = new Backup_Database(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
$status = $backupDatabase->backupTables(TABLES, OUTPUT_DIR) ? 'OK' : 'KO';
echo "


Backup result: ".$status;

/**
 * The Backup_Database class
 */
class Backup_Database {
    /**
     * Host where database is located
     */
    var $host = 'localhost';

    /**
     * Username used to connect to database
     */
    var $username = '';

    /**
     * Password used to connect to database
     */
    var $passwd = '';

    /**
     * Database to backup
     */
    var $dbName = '';

    /**
     * Database charset
     */
    var $charset = 'utf8';

    /**
     * Constructor initializes database
     */
    function Backup_Database($host, $username, $passwd, $dbName, $charset = 'utf8')
    {
        $this->host     = $host;
        $this->username = $username;
        $this->passwd   = $passwd;
        $this->dbName   = $dbName;
        $this->charset  = $charset;

        //$this->initializeDatabase();
    }

    /*protected function initializeDatabase()
    {

        try {
            $conn = new PDO("mysql:host=$this->host;dbname=$this->dbName", $this->username, $this->passwd);
           
            $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
           
            }
        catch(PDOException $e)
            {
            echo "Connection failed: " . $e->getMessage();
            }
    }*/

    /**
     * Backup the whole database or just some tables
     * Use '*' for whole database or 'table1 table2 table3...'
     * @param string $tables
     */
    public function backupTables($tables = '*', $outputDir = '.')
    
    {

        try {
            $conn = new PDO("mysql:host=localhost;dbname=$dbName", $username, $password);
           
            $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
           
            }
        catch(PDOException $e)
            {
            echo "Connection failed: " . $e->getMessage();
            }

        try
        {
            /**
            * Tables to export
            */
    
            if($tables == '*')
            {

                $tables = array();

                $result = $conn->query("show tables");

                 if($result->rowCount() > 0) {
                    $tables = $result->fetchAll(PDO::FETCH_NUM);
                    foreach ($tables as $table) {
                        $tablesNew[] = $table[0];
                       
                    }
                }
            }
            else
            {
                $tables = is_array($tables) ? $tables : explode(',',$tables);
                
            }
    

            $sql =  '-- phpMyAdmin SQL Dump
-- version 4.1.14
-- http://www.phpmyadmin.net
--
-- Φιλοξενητής: 127.0.0.1
-- Ξ§ΟΟΞ½ΞΏΟ‚ δημιουΟΞ³Ξ―Ξ±Ο‚: 27 Ιαν 2015 στις 15:30:23
-- Ξκδοση διακομιστή: 5.6.17
-- Ξκδοση PHP: 5.5.12

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";


/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
';'CREATE DATABASE IF NOT EXISTS '.$this->dbName.";\n\n";
            $sql .= 'USE '.$this->dbName.";\n\n";

            /**
            * Iterate tables
            */

            foreach($tablesNew as $table)
            {
                echo "Backup ".$table." Table...";
              
                $result1 = "SELECT * FROM ".$table;
                $numFields1 = $conn->prepare($result1);
                $numFields1->execute();
                $numFields = $numFields1->rowCount();


                $sql .= 'DROP TABLE IF EXISTS '.$table.';';
                $k1='SHOW CREATE TABLE '.$table;
                $resultk1 = $conn->prepare($k1);
                $resultk1->execute();
                $row2 = $resultk1->rowCount();
               
                $sql.= "\n\n".$row2[1].";\n\n";

                for ($i = 0; $i < $numFields; $i++) 
                {
                    while($row = $resultk1->fetch())
                    {
                       
                        $sql .= 'INSERT INTO `'.$table.'` VALUES(';
                        for($j=0; $j<$numFields; $j++) 
                        {

                            $row[$j] = addslashes($row[$j]);
                            $row[$j] = ereg_replace("\n","\\n",$row[$j]);
                            if (isset($row[$j]))
                            {
                               
                                $sql .= '"'.$row[$j].'"' ;
                            }
                            else
                            {
                                $sql.= '""';
                            }

                            if ($j < ($numFields-1))
                            {
                                $sql .= ',';
                            }
                        }
                        $sql.= ");\n";
                    }
                }

                $sql.="\n\n\n";

                echo " OK" . "";
            }
        }
        catch (Exception $e)
        {
            var_dump($e->getMessage());
            return false;
        }

        return $this->saveFile($sql, $outputDir);
    }

    /**
     * Save SQL to file
     * @param string $sql
     */
    protected function saveFile(&$sql, $outputDir = '.')
    {
        if (!$sql) return false;
      
        try
        {

            $handle = fopen($outputDir.'/'.$this->dbName.'-'.date("d-m-Y").'.sql','w+');
            fwrite($handle, $sql);
            fclose($handle);
        }
        catch (Exception $e)
        {
            var_dump($e->getMessage());
            return false;
        }

        return true;
    }
}
?>

 Ο κώδικας που χρησιμοποιώ είναι αυτός σε σχέση με τον δικό σου, έχω κάνει κάποιες μικρο-αλλαγές. Μου εμφανίζει κάποιο λάθος στις εντολές row[$j] = addslashes($row[$j]); $row[$j] = ereg_replace("\n","\\n",$row[$j]); που δεν καταλαβαίνω και επίσης στην fopen. Πρέπει να δημιουργήσω το αρχείο και μέτα να δώσω το κατάλληλο path;

Το έκανα και αυτό αλλά μου λέει ότι φάκελος δεν βρέθηκε...

Δημοσ.

χμμ δεν ξερω ..αν μπορεί να σε βοηθήσει κανένας πιο έμπειρος κάλος :) ..

άλλα δεν βρίσκω λόγο να κάνεις αλλαγές :/ , ζήτησες κωδικά να κάνει backup με php και το χεις :)

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...