Script de sauvegarde FTP Distant vers Local
Bonjour,
je réalise actuellement un script que j’exécuterai en tâche CRON et qui me permet de récupérer l'ensemble des fichiers et dossiers de divers sites web.
Au départ ce script s'exécutait seul.
Un tableau contenait l'ensemble des infos Clients.
Tour à tour chaque client était parcouru ainsi:
Code:
1 2 3 4
|
Je récupére les infos ftp et sql
Via socket j'execute un fichier sur le serveur distant du client qui crée un base.sql de sauvegarde.
Je récupére via ftp tout les fichiers et dossiers. |
Pour ce faire j'utilisais c'est deux fonctions:
Code:
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
| function charge($url)
{
$url=preg_replace('#^https?://#','',$url);
echo $url;
list($domaine,$fichier)=explode('/',$url,2);
$envoi = "GET /".$fichier." HTTP/1.1\r\n";
$envoi .= "Host: ".$domaine."\r\n";
$envoi .= "Connection: Close\r\n";
$envoi .= "Content-type: text/html\r\n";
$envoi .= "Content-Length: 0\r\n\r\n";
$envoi .= "\r\n";
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if($socket < 0)
return 'FATAL ERROR: socket_create() : " '.socket_strerror($socket).' "';
if (socket_connect($socket,gethostbyname($domaine),80) < 0)
return 'FATAL ERROR: socket_connect()';
if(($int = socket_write($socket, $envoi, strlen($envoi))) === false)
return 'FATAL ERROR: socket_write() failed, '.$int.' characters written';
socket_close($socket);
return 'OK';
} |
Code:
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
| function ftp_sync ( $dir, $Connexion ) {
//On controle l'existance et on se place dans le dossier
if ( $dir != "." ) {
if ( ftp_chdir ( $Connexion , $dir ) == false ) {
echo ( "Le dossier n'existe pas: $dir<BR>\r\n" );
return;
}
if (!( is_dir ( $dir )))
mkdir ( $dir, 0777, true );
chdir ( $dir );
}
//On recupere la liste des data
$contents = ftp_nlist ( $Connexion , "." );
//On lance la recuperation recursivement
foreach ( $contents as $file ) {
if ( $file == '.' || $file == '..' )
continue;
if (@ ftp_chdir ( $Connexion , $file )) {
ftp_chdir ( $Connexion , ".." );
ftp_sync ( $file, $Connexion );
} else ftp_get ( $Connexion , $file , $file , FTP_BINARY );
}
ftp_chdir ( $Connexion , ".." );
chdir ( ".." );
} |
Le problème avec cette solution était au niveau de variable. Les fichiers ne se chargeait pas toujours dans le dossier Client spécifié...
J'ai donc opté pour un script qui appellerai d'autres script. Ainsi le mélange de variable n'aurait pas posé problème...
Je ne sais pas comment exécuter une liste de script php local... J'ai testé les include mais le problème et que le dossier référent est celui du script d'appel, alors que je voudrais que chaque script se refère à lui même.