mad-proffessor Δημοσ. 31 Μαρτίου 2015 Δημοσ. 31 Μαρτίου 2015 Αφου εκτελείς μέσω της κλησης system τη mysqldump το τελικό αρχείο .sql θα αποθηκευτει στο path του χρήστη που εκτελει την εντολή. Ε η php προφανώς δεν έχει στο include_path το path που είναι αποθηκευμένο το αρχείο κ δε θα το βρίσκει. Εσυ πρέπει να αποθηκευσεις το αρχείο σε ένα κατάλογο που θα μπορει ο interpeter της php να το βρει. Να είναι δηλαδη μέσα στο include_path της php. Αυτο σα πρώτο hint. 1
defacer Δημοσ. 1 Απριλίου 2015 Δημοσ. 1 Απριλίου 2015 Αυτό που πρέπει να κάνεις λέγεται debugging, χωρίς να ελέγξεις τι συμβαίνει στο πρόγραμμα την ώρα που τρέχει μόνο σούπερ απλά προβλήματα λύνονται. Ίσως είναι η ώρα, αλλά προσωπικά δε βλέπω κάτι άμεσα στραβό στον κώδικα. Ναι, έχει relative paths αλλά τι σημασία έχει αυτό; Στο ίδιο (working) directory που τα πετάει π.χ. η mysqldump θα πάει να τα βρει και η π.χ. readfile. Αν ήταν absolute τι θα άλλαζε δηλαδή;
thiva7 Δημοσ. 2 Απριλίου 2015 Δημοσ. 2 Απριλίου 2015 Δοκιμασε αυτο <?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; } } ?>
Gio123 Δημοσ. 2 Απριλίου 2015 Μέλος Δημοσ. 2 Απριλίου 2015 Δοκιμασε αυτο <?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"); δεν δουλεύει για κάποιο λόγο και δεν μπορώ να καταλάβω το γιατί...
thiva7 Δημοσ. 2 Απριλίου 2015 Δημοσ. 2 Απριλίου 2015 Φίλε έχω αλλάξει την 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"); δεν δουλεύει για κάποιο λόγο και δεν μπορώ να καταλάβω το γιατί... δωσε μου των κώδικα σου άμα θες να κάνω και γω καμιά δοκιμή.
Gio123 Δημοσ. 2 Απριλίου 2015 Μέλος Δημοσ. 2 Απριλίου 2015 <?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; Το έκανα και αυτό αλλά μου λέει ότι φάκελος δεν βρέθηκε...
thiva7 Δημοσ. 3 Απριλίου 2015 Δημοσ. 3 Απριλίου 2015 χμμ δεν ξερω ..αν μπορεί να σε βοηθήσει κανένας πιο έμπειρος κάλος .. άλλα δεν βρίσκω λόγο να κάνεις αλλαγές :/ , ζήτησες κωδικά να κάνει backup με php και το χεις
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα