index.php


header('Content-Type: text/html; charset=utf-8');
include 'Yedekle.class.php';
date_default_timezone_set('Europe/Istanbul');
$bugun=date("d-m-H-i");

$bilgiler = array(
array(
'src' => 'mysql',
'host' => 'localhost',
'kadi' => 'root',
'parola' => '',
'veritabani' => 'gsh_db'
),
array(
'src' => 'mysql',
'host' => 'localhost',
'kadi' => 'root',
'parola' => '',
'veritabani' => 'gsh_db2'
),
array(
'src' => 'mysql',
'host' => 'localhost',
'kadi' => 'root',
'parola' => '',
'veritabani' => 'test'
)

);

$olustur = new Yedekle($bilgiler);
$yedekle = $olustur->yedek();

if(!$yedekle['hata']){

header('Content-type: text/plain');
header('Content-disposition: attachment; filename=db'.$bugun.'.sql');
echo $yedekle['mesaj'];

} else {
echo 'İşlem başarısız oldu!';
}


Yedekle.class.php


class Yedekle {
/**
* Bağlantı kurulacak alanın aktarıldığı değişken
* @var
*/
private $host;
/**
* Bağlantı aşamasında kullanacağımız değişken
* @var
*/
private $src;
/**
* Bağlantı aşamasında kullanılan kullanıcı adı
* @var
*/
private $kadi;
/**
* Bağlantı aşamasında kullanacağımız parola
* @var
*/
private $parola;
/**
* Bağlanacağımız veritabanının adı
* @var
*/
private $vt_adi;
/**
* PDO kullanarak veritabanına bağlanacağımız değişken
* @var
*/
private $bilgiler;
/**
* Veritabanındaki tabloların dizi olarak tutulacağı değişken
* @var
*/
private $tablolar = array();
/**
* Veritabanına bağlıyken kullanacağımız nesne
* @var
*/
private $islem;
/**
* Alınan hataların dizi olarak aktarıldığı değişken
* @var
*/
private $hata = array();
/**
* Başarılı olduğumuzda kullanacağımız sonuç dizesi
* @var
*/
private $son;




/**
* Veritabanı bağlantısı @uses private
*/
private function baglan(){
try {
$this->islem = new PDO($this->bilgiler.';charset=utf8;', $this->kadi, $this->parola);
$this->islem->query('SET CHARACTER SET UTF8');
} catch (PDOException $e) {
$this->islem = null;
$this->hata[] = $e->getMessage();
return false;
}
}

/**
* Tabloları al @uses private
*/
private function tablo_al(){
try {
$goster = $this->islem->query('SHOW TABLES');
$bol = $goster->fetchAll();
$indis = 0;
foreach($bol as $tablo){
$this->tablolar[$indis]['ad'] = $tablo[0];
$this->tablolar[$indis]['olustur'] = $this->sutun_al($tablo[0]);
$this->tablolar[$indis]['veri'] = $this->veri_al($tablo[0]);
$indis++;
}
unset($goster);
unset($bol);
unset($indis);

return true;
} catch (PDOException $e) {
$this->islem = null;
$this->hata[] = $e->getMessage();
return false;
}
}

/**
*
* Sütunları al @uses private
*/
private function sutun_al($tablo_adi){
try {
$goster = $this->islem->query('SHOW CREATE TABLE '.$tablo_adi);
$bol = $goster->fetchAll();
$bol[0][1] = preg_replace("/AUTO_INCREMENT=[\w]*./", '', $bol[0][1]);
return $bol[0][1];
} catch (PDOException $e){
$this->islem = null;
$this->hata[] = $e->getMessage();
return false;
}
}

/**
*
* Tablolardan kayıtlı verileri al @uses private
*/
private function veri_al($tablo_adi){
try {
$goster = $this->islem->query('SELECT * FROM '.$tablo_adi);
$bol = $goster->fetchAll(PDO::FETCH_NUM);
$veri = '';
foreach ($bol as $parcalar){
foreach($parcalar as &$deger){
$deger = addslashes($deger);
}
$veri .= 'INSERT INTO '. $tablo_adi .' VALUES (\'' . implode('\',\'', $parcalar) . '\');'."\n";
}
return $veri;
} catch (PDOException $h){
$this->islem = null;
$this->hata[] = $h->getMessage();
return false;
}
}

public function Yedekle($parametre){

foreach($parametre as $db_info){

if( !$db_info['host'] ){
$this->hata[] = 'Host adresi geçersiz.';
}
if( !$db_info['kadi'] ){
$this->hata[] = 'Kullanıcı adı geçersiz.';
}
if( !isset($db_info['parola']) ){
$this->hata[] = 'Parola geçersiz.';
}
if( !$db_info['veritabani'] ){
$this->hata[] = 'Veritabanı adı geçersiz.';
}
if( !$db_info['src'] ){
$this->hata[] = 'Veritabanı türü geçersiz.';
}

if( count($this->hata) > 0 ){
return;
}

$this->host = $db_info['host'];
$this->tip = $db_info['src'];
$this->kadi = $db_info['kadi'];
$this->parola = $db_info['parola'];
$this->vt_adi = $db_info['veritabani'];

if($this->host=='localhost'){
$this->host = '127.0.0.1';
}
$this->bilgiler = $this->tip.':host='.$this->host.';dbname='.$this->vt_adi;

$this->baglan();
$this->tablo_al();
$this->olustur();

}

}

/**
* Yedek almak için çağırılan fonksiyon
* @example Yedekle::yedek();
*/
public function yedek(){
if(count($this->hata)>0){
return array('hata'=>true, 'mesaj'=>$this->hata);
}
return array('hata'=>false, 'mesaj'=>$this->son);
}

/**
* Yedek dizeleri oluşturur @uses private
*/
private function olustur(){
foreach ($this->tablolar as $t) {
$this->son .= $t['olustur'] . ";\n\n";
$this->son .= $t['veri']."\n\n\n";
}
}
}