[RESOLU] sauvegarde serveur A vers serveur B en PHP

Eléphant du PHP | 150 Messages

12 juin 2014, 12:46

bonjour,
j'ai actuellement 2 serveur DÉDIER

je souhaiterais que chaque jour grace a une tache Cron qui executera cette page PHP

copie le dossier "/sauvegarde" de mon serveur A dans le dossier "/BACKUP" de mon serveur B
$ftp_server="mon serveur A"; 
 $ftp_user_name="user"; 
 $ftp_user_pass="password"; 
 
 //  connection 
 $conn_id = ftp_connect($ftp_server); 

 // identification 
 $login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass); 
 
 if ((!$conn_id) || (!$login_result))
{echo 'la connexion a echouer';die();}
else{
echo 'la connexion a reussi';
}
pour cette partie la "la plus simple" sa marche je suis bien connecter au FTP de mon serveur A

mais je ne sais comment récupérer le dossier " /sauvegarde " et tout ce qu'il contient et les stocker dans le dossier " /BACKUP " de mon serveur B



merci par avance de votre aide

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

12 juin 2014, 13:24

salut,

pour le parcourt du répertoire source tu peux utiliser la classe DirectoryIterator ou RecursiveDirectoryIterator

pour ce qui est de l'envoi de fichier via ftp : ftp_put ou ftp_nb_put

si tu as deux serveurs dédiés pourquoi ne pas faire cela avec des outils généralement présent sur les machines (comme rsync ?)

@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 150 Messages

12 juin 2014, 13:53

pour ce qui est de l'envoi de fichier via ftp : ftp_put ou ftp_nb_put
justement je ne sais pas me servir de ftp_put ou ftp_nb_put .

PS: je suis plutot novice

si tu as deux serveurs dédiés pourquoi ne pas faire cela avec des outils généralement présent sur les machines (comme rsync ?)
je ne peut pas car ce sont des serveur clef en main donc pas d'acces Root

Eléphant du PHP | 150 Messages

13 juin 2014, 22:48

info supp :
mon dossier source "sauvegarde" ne contiens pas de sous dossier seulement des fichiers .sql et .zip

est ce que c'est comme sa que s'utilise cette fonction "ftp_put"
$ftp_server="mon serveur A";      //le serveur B se connecte au serveur A
 $ftp_user_name="user"; 
 $ftp_user_pass="password"; 
 $dossier_source = "/sauvegarde";   //dossier à copier du serveur A
 $destination = "/BACKUP/";            // dossier de destination dans serveur B
 
 //  connection 
 $conn_id = ftp_connect($ftp_server); 
 
 // identification 
 $login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass); 
 
 if ((!$conn_id) || (!$login_result)) {echo 'la connexion a échouer';die();} else{ echo 'la connexion a réussi';}
 
// Transfer du dossier 
 if (ftp_put($conn_id, $destination, $dossier_source, FTP_ASCII)) { 
    echo "succès du Transfer de : $dossier_source\n"; 
    exit; 
 } 
else { echo "il y a un problème avec la copie de : $dossier_source\n"; exit; } 
 
// fermeture de la connexion FTP 
 ftp_close($conn_id); 

merci encore de votre aide
cdt

ViPHP
xTG
ViPHP | 7331 Messages

14 juin 2014, 08:27

ftp_put ne fonctionne que sur des fichiers et non des répertoires.
Tu peux t'inspirer du code suivant pour une copie récursive :
http://fr2.php.net/manual/fr/function.ftp-put.php#34688

Mammouth du PHP | 2278 Messages

14 juin 2014, 08:55

Je me demande si net2ftp ne ferait pas l'affaire (http://www.net2ftp.com/)
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Eléphant du PHP | 150 Messages

14 juin 2014, 15:39

bonjour,
merci pour cette réponse rapide

je suis obliger d'utiliser la version PHP car derrière se sera une tache CRON qui l’exécutera

lorsque j’exécute cette page j'ai une erreur :
$ftp_server="mon serveur A";      //le serveur B se connecte au serveur A
 $ftp_user_name="user"; 
 $ftp_user_pass="password"; 
 $dossier_source = "sauvegarde";   //dossier à copier du serveur A
 $destination = "save/BACKUP";            // dossier de destination dans serveur B
 
 //  connection 
 $conn_id = ftp_connect($ftp_server); 
 
 // identification 
 $login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass); 
 
 if ((!$conn_id) || (!$login_result)) {echo 'la connexion a échouer';die();} else{ echo 'la connexion a réussi';}
 
 
$iterator = new DirectoryIterator($dossier_source);
//parcours de tous les fichiers du repertoire source
foreach ($iterator as $file) {
    if ($file->isFile()) { 
// Transfer du dossier 
 if (ftp_put($conn_id, $destination.'/'.$file->getFilename(), $dossier_source, FTP_ASCII)) { 
    echo "succès du Transfer de : $dossier_source\n"; 
 } 
}
else { echo "il y a un problème avec la copie de : $dossier_source\n";  } 
 
}//foreach
// fermeture de la connexion FTP 
 ftp_close($conn_id);
voici l'erreur :
la connexion a réussi
Fatal error: Uncaught exception 'RuntimeException' with message 'DirectoryIterator::__construct(sauvegarde) [<a href='directoryiterator.--construct'>directoryiterator.--construct</a>]: failed to open dir: No such file or directory' in /mon_serveur/transfer_1.php:21 Stack trace: #0 /mon_serveur/transfer_1.php(21): DirectoryIterator->__construct('sauvegarde') #1 {main} thrown in /mon_serveur/transfer_1.php on line 21
et voici la présentation des serveurs :

serveur B à la racine :

save
contiens --> BACKUP
et --> transfer_1.php

-----------------------------------------------

serveur A à la racine :

sauvegarde
contiens --> test.sql
et --> test.zip


avez vous une idée ?

ViPHP
xTG
ViPHP | 7331 Messages

14 juin 2014, 16:57

Le script PHP est bien exécuté sur le serveur A ?