Guest User

Untitled

a guest
Oct 20th, 2017
396
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 3.47 KB | None | 0 0
  1. <?php
  2. ob_implicit_flush();
  3.  
  4.  
  5. $dests =  array(
  6.     array('url' => '/root/.saves/'),
  7.     array('protocol' =>'ftp',
  8.         'login' => 'ruedesflo',
  9.         'pass'  => 'kikoulol',
  10.         'host'  => 'xx.xx.xx.xx',
  11.         'dir'    => '/.saves/mirage/'
  12.     )
  13. );
  14.  
  15.  
  16. /**
  17. * [name, saveLastTime, saveInterval,
  18. *  destinations:[url]
  19. *  pour les destinations ftp :
  20. *  $match[0] = ftp://username:password@sld.domain.tld/path1/path2/
  21. *
  22. *
  23. *
  24. */
  25. $dbs = array(
  26. array(
  27.     'name' => 'conc_epita17',
  28.     'saveLastTime' => 0,
  29.     'saveInterval' => 60*60*24,
  30.     'saveNb'       => 3,
  31.     'destinations' => $dests
  32. )
  33. );
  34.  
  35.  
  36. $userDb = array(
  37.     'name' => 'root',
  38.     'pass' => 'dfgdfgf'
  39. );
  40.  
  41. $tempDir = '/root/';
  42.  
  43. $mysqlDumpCmd = "mysqldump";
  44.  
  45. $ext = 'sql';
  46. $extGz = 'gz';
  47.  
  48. $nbDb = count($dbs);
  49.  
  50. // Décommenter pour faire fonctionner le script en boucle
  51. //while (1)
  52. {
  53.     for ($i=0; $i < $nbDb; $i++)
  54.     {
  55.         $db =& $dbs[$i];
  56.  
  57.         $time = time();
  58.    
  59.         if ( $time > $db['saveLastTime'] + $db['saveInterval'] )
  60.         {
  61.             echo "Sauvegarde de $db[name]\n";
  62.             $date = date("Y-m-d-h-i-s");
  63.             $fileName=$db['name'].'-'.$date;
  64.             $saveAction;
  65.             $cmd = "$mysqlDumpCmd --opt --skip-extended-insert --complete-insert --user=$userDb[name]";
  66.             $cmd .= (!empty($userDb['pass'])) ? " --password=$userDb[pass]" : '';
  67.             $cmd .= " $db[name] | gzip -v > $tempDir$fileName.gz";
  68.             exec($cmd, $retRaw, $retCode);
  69.  
  70.             foreach ($db['destinations'] as $destination)
  71.             {
  72.                 $exists = 0;
  73.                 if (!empty($destination['url']))
  74.                 {
  75.                     echo "Copie locale sur $destination[url]\n";
  76.  
  77.                     $dirList = glob($destination['url'].$db['name'].'*.gz');
  78.                     $nbSaves = count($dirList);
  79.                    
  80.                     if ($nbSaves > $db['saveNb']) {
  81.                         $files = array();
  82.                         foreach ($dirList as $file)
  83.                             $files[filemtime($file)] = $file;
  84.                            
  85.                         ksort($files);
  86.                        
  87.                         for ($i=$nbSaves, $j=0; $i > $db['saveNb']; $i--) {
  88.                             $fileToDel = $dirList[$j];
  89.                             echo "Suppression de $fileToDel\n";
  90.                             unlink($fileToDel);
  91.                             $j++;
  92.                         }
  93.                     }
  94.                     copy($tempDir.$fileName.'.gz',$destination['url'].$fileName.'.gz');
  95.                    
  96.                 }
  97.            
  98.                 else
  99.                 {
  100.                     $ftp = getFtpConnection($destination);
  101.                     if ($ftp == false){
  102.                         echo "Copie impossible.\n";
  103.                         continue;
  104.                     }
  105.    
  106.                     echo "Copie distance sur $destination[host]\n";
  107.                     $dirList = ftp_nlist($ftp, '.');
  108.                     $files = array();
  109.                     foreach ($dirList as $file) {
  110.                         if (strpos($file, $db['name']) !== false)
  111.                         {
  112.                             $mfile = ftp_mdtm($ftp, $file);
  113.                             $files[$mfile] = $file;
  114.                         }
  115.                     }
  116.                    
  117.                     $nbSaves = count($files);
  118.                     if ($nbSaves > $db['saveNb']) {
  119.                         ksort($files);
  120.                         for ($i=$nbSaves; $i > $db['saveNb']; $i--) {
  121.                             $fileToDel = current($files);
  122.                            
  123.                             echo "Suppression distante de $fileToDel\n";
  124.                             ftp_delete($ftp, $fileToDel);
  125.                             next($files);
  126.                         }
  127.                     }
  128.                    
  129.                     $success =  ftp_put($ftp, $fileName.'.gz', $tempDir.$fileName.'.gz', FTP_BINARY);
  130.                    
  131.                     echo "Copie OK \n";
  132.                     ftp_close($ftp);
  133.                 }
  134.             }
  135.             unlink("$tempDir$fileName.gz");
  136.             $db['saveLastTime'] = time();
  137.         }
  138.     }
  139.     //sleep(10);
  140. }
  141.  
  142.  
  143. function getFtpConnection($data)
  144. {
  145.    
  146.     $conn = ftp_connect($data['host']);
  147.     if ($conn === false)
  148.         return false;
  149.  
  150.     // Login
  151.     if (ftp_login($conn, $data['login'], $data['pass']))
  152.     {
  153.         // Change the dir
  154.         ftp_chdir($conn, $data['dir']);
  155.  
  156.         // Return the resource
  157.         return $conn;
  158.     }
  159.  
  160.     // Or retun null
  161.     return null;
  162. }
  163.  
  164. ?>
Add Comment
Please, Sign In to add comment