Úprava scriptu na zálohovanie

Programovacie jazyky, rady, poradňa...
samko2339
Novice
Novice
Príspevky: 2
Registrovaný: 29 jan 2013, 21:51

Úprava scriptu na zálohovanie

Príspevok od používateľa samko2339 »

Mohol by mi prosím, niekto upraviť tento PHP script, aby sa zálohy FTP ukladali na externý FTP server a aby sa staré zálohy automaticky vymazávali (vždy by bolo max. 5 najnovších záloh) ?

Script chcem dať do cronu (pravidelné, automatické zálohovanie v noci).

V PHP som nikdy nerobil :)

Ďakujem.

Kód: Vybrať všetko

<?



function makeAll($dir, $mode = 0777, $recursive = true) {
if( is_null($dir) || $dir === "" ){
return FALSE;
}

if( is_dir($dir) || $dir === "/" ){
return TRUE;
}
if( makeAll(dirname($dir), $mode, $recursive) ){
return mkdir($dir, $mode);
}
return FALSE;
}


echo $timefolder = time();
mkdir("/data/web/virtuals/39132/virtual/www/", 0700);

if (smartCopy("/data/web/virtuals/39132/virtual/www/", "/data/web/virtuals/39132/virtual/www/subdom/zalohy/")) echo "Záloha byla úspěšně provedena"; else echo "Nepovedlo se provést zálohu webu";

function smartCopy($source, $dest, $options=array('folderPermission'=>0755,'filePermission'=>0755))
{
$result=false;

//For Cross Platform Compatibility
if (!isset($options['noTheFirstRun'])) {
$source=str_replace('\\','/',$source);
$dest=str_replace('\\','/',$dest);
$options['noTheFirstRun']=true;
}

if (is_file($source)) {
if ($dest[strlen($dest)-1]=='/') {
if (!file_exists($dest)) {
makeAll($dest,$options['folderPermission'],true);
}
$__dest=$dest."/".basename($source);
} else {
$__dest=$dest;
}
if (!file_exists($__dest)) {
$result=copy($source, $__dest);
chmod($__dest,$options['filePermission']);
}
} elseif(is_dir($source)) {
if ($dest[strlen($dest)-1]=='/') {
if ($source[strlen($source)-1]=='/') {
//Copy only contents
} else {
//Change parent itself and its contents
$dest=$dest.basename($source);
@mkdir($dest);
chmod($dest,$options['filePermission']);
}
} else {
if ($source[strlen($source)-1]=='/') {
//Copy parent directory with new name and all its content
@mkdir($dest,$options['folderPermission']);
chmod($dest,$options['filePermission']);
} else {
//Copy parent directory with new name and all its content
@mkdir($dest,$options['folderPermission']);
chmod($dest,$options['filePermission']);
}
}

$dirHandle=opendir($source);
while($file=readdir($dirHandle))
{
if($file!="." && $file!="..")
{
$__dest=$dest."/".$file;
$__source=$source."/".$file;
//echo "$__source ||| $__dest<br />";
if ($__source!=$dest) {
$result=smartCopy($__source, $__dest, $options);
}
}
}
closedir($dirHandle);

} else {
$result=false;
}
return $result;
}

Ešte by som potreboval upraviť aj tento script (zálohovanie databázy), aby sa staré zálohy tiež automaticky vymazávali (vždy by bolo max. 5 najnovších záloh). Script je zo stránky: http://www.theblog.cz/programovanie/zal ... edos-disk/

Kód: Vybrať všetko

<?php

    $DBhost = 'xxx.wedos.net';
    $DBuser = 'user';
    $DBpass = 'password';
    $DBName = 'namedb';
	$ftp_server = 'xxx.xxx.wedos.net';
    $ftp_user_name = 'xxx';
    $ftp_user_pass = 'xxxxxxx'; 
    $folderr = 'backup/';  // !!!! bacha musi existovat a treba si nastavit prava na zapis
	$table = '*';

 

    if ($table == '*') {
        $extname = 'all';
    }else{
        $extname = str_replace(",", "_", $table);
        $extname = str_replace(" ", "_", $extname);
    }
   
  
    $filess = 'dbbackup_' . date("d.m.Y_H_i") . '_cron_' . $extname;
 

    backup_tables($DBhost,$DBuser,$DBpass,$DBName,$table,$extname,$folderr,$filess,$ftp_server,$ftp_user_name,$ftp_user_pass);
 
    
    function backup_tables($host,$user,$pass,$name,$tables,$bckextname,$folderr,$filess,$ftp_server,$ftp_user_name,$ftp_user_pass)
    {
        $link = mysql_connect($host,$user,$pass);
        mysql_select_db($name,$link);
        $return = "";
 
    
        if($tables == '*') {
            $tables = array();
            $result = mysql_query('SHOW TABLES');
            while($row = mysql_fetch_row($result)) {
                $tables[] = $row[0];
            }
        } else {
            if (is_array($tables)) {
                $tables = explode(',', $tables);
            }
        }
 
 
    foreach($tables as $table) {
        $result = mysql_query('SELECT * FROM '.$table);
        $num_fields = mysql_num_fields($result);
 

        $return .= 'DROP TABLE ' . $table . ';<|||||||>';
 

        $row2 = mysql_fetch_row(mysql_query('SHOW CREATE TABLE '.$table));
        $return .= "\n\n" . $row2[1] . ";<|||||||>\n\n";
 
  
        for ($i = 0; $i < $num_fields; $i++) {
            while($row = mysql_fetch_row($result)) {
                $return.= 'INSERT INTO '.$table.' VALUES(';
                for($j=0; $j<$num_fields; $j++) {
                    $row[$j] = addslashes($row[$j]);
                    $row[$j] = str_replace("\n","\\n",$row[$j]);
                    if (isset($row[$j])) {
                        $return .= '"' . $row[$j] . '"';
                    } else {
                        $return .= '""';
                    }
                    if ($j<($num_fields-1)) {
                        $return.= ',';
                    }
                }
                $return.= ");<|||||||>\n";
            }
        }
        $return.="\n\n\n";
    }
 

    $handle = fopen($folderr.$filess.'.sql','w+');
    fwrite($handle,$return);
    fclose($handle);
 

    mysql_close();
    }
 


$file =  $folderr.$filess.'.sql';
$remote_file = $filess.'.sql';


$conn_id = ftp_connect($ftp_server);


$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
// upload
if (ftp_put($conn_id, $remote_file, $file, FTP_ASCII)) {
 //echo "Dokonceny upload suboru $file\n";
} else {
 //echo "Nejaky problem s uploadnutim suboru $file\n";
}


ftp_close($conn_id);

if (!is_dir($file)) {
unlink($file);
}

    print('The backup has been created successfully!');
?>
Napísať odpoveď