Hosting Per Te - HelpDesk
Parla con un operatore
lug 27 |
Backup di un database utilizzando solo PHP
27/07/2016 - 11:36 AM
|
La classe di seguito riportata consente di esportare totalmente o parzialmente (i.e. solo alcune tabelle) un qualunque database in una directory prestabilita. Il file creato sarà poi scaricabile tramite FTP. Spesso i dati di accesso sono reperibili in un file del tipo configurazione.php, access.php o qualcosa di simile e sicuramente esiste una directory con i necessari permessi di lettura e scrittura dove poter inserire il file di backup (cache, temp, ecc).
Ecco il codice:
<?php /** * Classe Backup_Database per * il back up parziale o totale di un database MySQL * autore D. L. Azana */
// Report errori error_reporting(E_ALL);
/** * Assegnazione parametri */ define(“DB_USER”, ‘admin’); define(“DB_PASSWORD”, ‘passwd’); define(“DB_NAME”, ‘nome del database’); define(“DB_HOST”, ‘localhost’); define(“OUTPUT_DIR”, ‘cache’); define(“TABLES”, ‘*’);
/** * Istanza Backup_Database ed esecuzione backup */ $backupDatabase = new Backup_Database(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME); $status = $backupDatabase->backupTables(TABLES, OUTPUT_DIR) ? ‘OK’ : ‘KO’; echo “
risultati backup: “.$status;
/** * Classe Backup_Database */ class Backup_Database { /** * Host dove il database alloggia */ var $host = ”;
/** * Username utilizzato per collegarsi al DB */ var $username = ”;
/** * Password utilizzato per collegarsi al DB */ var $passwd = ”;
/** * Database di cui effettuare il backup */ var $dbName = ”;
/** * charset del DB */ var $charset = ”;
/** * Constructor */ 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 l’intero database oppure solo alcune Tabelle * Utilizzre ‘*’ per effetuae il backup dell’intero database oppure ‘tabella1 tabella2 tabella3… per un backup parziale’ * @param string $tables */ public function backupTables($tables = ‘*’, $outputDir = ‘.’) { try { /** * Tabelle da esportare */ 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 = ‘CREATE DATABASE IF NOT EXISTS ‘.$this->dbName.”;\n\n”; $sql .= ‘USE ‘.$this->dbName.”;\n\n”;
/** * Iterazione tabelle */ foreach($tables as $table) { echo “Back up tabella”.$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); }
/** * Salvare il file SQL * @param string $sql */ protected function saveFile(&$sql, $outputDir = ‘.’) { if (!$sql) return false;
try { $handle = fopen($outputDir.’/db-backup-‘.$this->dbName.’-‘.date(“Ymd-His”, time()).’.sql’,’w+’); fwrite($handle, $sql); fclose($handle); } catch (Exception $e) { var_dump($e->getMessage()); return false; }
return true; } }
?>
HostingPerte offre il servizio di backup gestito tramite R1Soft Server Backup Manager. R1Soft è un software server che consente la protezione dei dati ed il disaster recovery per i server Linux e workstation che eseguono Microsoft Windows e sistemi operativi Linux. L'articolo Backup di un database utilizzando solo PHP sembra essere il primo su Blog Hosting Per Te. | |