1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149
|
<?php
class model_sqldump extends abstract_model{
//profil de connexion
protected $sConfig='pdoMysql';
private $options = array(
'MySQL_HOST' => '',
'MySQL_USERNAME' => '',
'MySQL_PASSWORD' => '',
'MySQL_DATABASE' => '',
'CHARSET' => 'UTF8',
'PATH' => 'data/dump/',
'FTP' => false,
'FTP_HOST' => '',
'FTP_USERNAME' => '',
'FTP_PASSWORD' => '',
'FTP_PATH' => '/'
);
private $string = "SET SQL_MODE=\"NO_AUTO_VALUE_ON_ZERO\";\n\n";
private $connect;
public static function getInstance(){
return self::_getInstance(__CLASS__);
}
public function __construct($options = array()){
foreach($options as $k => $v){
$this->options[$k] = $v;
}
$this->tables();
$this->create_tables();
$this->columns();
$this->inserts();
$this->toString();
$this->save();
}
private function tables(){
$tTables=$this->getListTable();
foreach($tTables as $table){
$this->tables[]=array('NAME'=>$table);
}
}
private function create_tables(){
foreach($this->tables as $k => $v){
if($row = $this->query("SHOW CREATE TABLE ".$v['NAME'])->fetch(PDO::FETCH_NUM)){
$this->tables[$k]['CREATE'] = 'DROP TABLE '.$v['NAME'].";\n\n".$row[1];
}else{
throw new Exception('Error in the next function: '.__FUNCTION__.'. Error message: '.print_r($this->getSgbd()->getPdo()->errorInfo(),1));
}
}
}
private function columns(){
foreach($this->tables as $k => $v){
if($result = $this->query("SHOW COLUMNS FROM ".$v['NAME'])){
while($row = $result->fetch(PDO::FETCH_NUM)){
$this->tables[$k]['FIELDS'][] = '`'.$row[0].'`';
}
}else{
$result->close();
throw new Exception('Error in the next function: '.__FUNCTION__.'. Error message: '.print_r($this->getSgbd()->getPdo()->errorInfo(),1));
return;
}
}
//$result->close();
}
private function inserts(){
foreach($this->tables as $k => $v){
if($result =$this->query("SELECT * FROM `".$v['NAME']."`")){
$insert = "INSERT INTO `".$v['NAME']."` (".implode(',', $v['FIELDS']).") VALUES ";
$values = array();
while($row = $result->fetch(PDO::FETCH_ASSOC)){
$val = array();
foreach($v['FIELDS'] as $f){
$f = str_replace('`', '', $f);
$val[] = '\''.$row[$f].'\'';
}
$values[] = "\n(".implode(",",$val).")";
}
$this->tables[$k]['INSERT'] = $insert.implode(',',$values);
}else{
throw new Exception('Error in the next function: '.__FUNCTION__.'. Error message: '.print_r($this->getSgbd()->getPdo()->errorInfo(),1));
$result->close();
return;
}
}
//$result->close();
}
private function toString(){
foreach($this->tables as $k => $v){
$this->string .= $v['CREATE'].";\n\n";
$this->string .= $v['INSERT'].";\n\n";
}
}
private function copyToFtp($file){
$ftpfile = substr($this->options['FTP_PATH'], -1) == '/' ? 'db_backup_'.$date.'.sql' : '/db_backup_'.$date.'.sql';
if($ftp = ftp_connect($this->options['FTP_HOST'])){
if(ftp_login($ftp, $this->options['FTP_USERNAME'], $this->options['FTP_PASSWORD'])){
if(!ftp_put($ftp, $ftpfile, $file, FTP_ASCII)){
throw new Exception('FTP put file error');
}
}else{
throw new Exception('FTP login error');
}
ftp_close($ftp);
}else{
throw new Exception('FTP connection error');
}
}
private function save(){
$date = date('Y-m-d-H-i-s');
$file = '../data/dump/db_backup_'.$date.'.sql' ;
//debug print $file;
if(@file_put_contents($file, $this->string)){
if($this->options['FTP'] === true){
$this->copyToFtp($file);
}
}else{
throw new Exception('Error in the next function: '.__FUNCTION__.'. Error message: File save failed!');
}
}
protected function query($sReq,$tParam=null){
$this->getSgbd()->getPdo()->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
$sth = $this->getSgbd()->getPdo()->prepare($sReq);
if(is_array($tParam)){
$sth->execute($tParam);
}else{
$sth->execute();
}
return $sth;
}
} |
Partager