Précédent   Forum des professionnels en informatique > PHP > Langage
Langage Forum sur le langage PHP, la POO, les conventions, la sécurité, etc. Avant de poster : FAQ Langage, toutes les FAQ PHP, cours langage et sources PHP
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 28/07/2011, 14h39   #1
Futur Membre du Club
 
Inscription : août 2009
Messages : 45
Détails du profil
Informations forums :
Inscription : août 2009
Messages : 45
Points : 16
Points : 16
Par défaut 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.
dutom007 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/07/2011, 11h16   #2
Membre habitué
 
Inscription : décembre 2007
Messages : 181
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 181
Points : 140
Points : 140
salut,

tes fichiers etc de chaque clients tu les uploads un par un? ou tu regroupe par client dans un fichier archive avec un "tar" par exemple?
roduce est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/07/2011, 14h28   #3
Futur Membre du Club
 
Inscription : août 2009
Messages : 45
Détails du profil
Informations forums :
Inscription : août 2009
Messages : 45
Points : 16
Points : 16
Je sauvegarde le contenu dans un dossier par client et fichiers par fichiers.

J'avais opté au départ de faire un .tar le serveur distant et de ne récupérer que cette archive. Mais pour les clients en mutualisé, cela n'ai pas possible à cause de la limite d'exécution de script.

Pour palier à mon souci je suis passé par un appel ajax du script de récupération.

En clair j'exécute un fichier save_all.php qui appel par ajax les script save_this.php dupliquer dans chaque dossier client (avec les variables ftp et sql correspondante).

Le souci c'est que je ne sais pas si un script avec de l'ajax peut être exécuter par une tâche Cron...
dutom007 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/07/2011, 14h35   #4
Membre habitué
 
Inscription : décembre 2007
Messages : 181
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 181
Points : 140
Points : 140
le A de AJAX veut dire asynchrone.
Tu ne peux pas faire de l'asynchrone en CRON. (ce serait assez étrange comme idée d'ailleurs)

Autre piste, j'ai eu entendu de parler de logiciel de backup sous linux, peut être devrais-tu essayer a ce sujet.
roduce est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/07/2011, 14h48   #5
Membre Expert
 
Avatar de gene69
 
Inscription : janvier 2006
Messages : 951
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : janvier 2006
Messages : 951
Points : 1 063
Points : 1 063
Citation:
Je ne sais pas comment exécuter une liste de script php local
pouf pouf

si c'est un script tu ajoutes au tout début du script le petit commentaire suivant : https://secure.wikimedia.org/wikiped...ang_%28Unix%29
cas 1, unix+linux

enfin ça c'est si la commande "which php" répond "/usr/bin/php"

et maintenant si ton fichier s'appelle "script.php" et s'il est à un endroit ou le cron a acces (pense à ses droits d'utilisateurs...)
Code :
1
2
chmod g+x script.php
chown toto:www-data script.php
maintenant tu peux exécuter ton script dans un terminal comme si c'était du bash/sh/... ou un executable bidon
Citation:
toto$./script.php
pareil dans le cron.

cas 2 windows et unix aussi ça marche aussi

tu indiques le chemin dans la tache planifiée
Code :
c:/php/php.exe f:/scripts/scheduler/script.php
et ça marche aussi dans un terminal... évidement.
et tu as acces à $_SERVER['argc'] et $_SERVER['argv'] (de mémoire).
__________________
PHP fait nativement la validation d'adresse électronique Vous êtes perdu en PHP? rassurez-vous ici (en)
Utilisez le bouton résolu!
gene69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/07/2011, 15h15   #6
Futur Membre du Club
 
Inscription : août 2009
Messages : 45
Détails du profil
Informations forums :
Inscription : août 2009
Messages : 45
Points : 16
Points : 16
Houla tu m'as un peu perdu gene69.

Lorsque je parle d'exécution c'est via un script php et non par le terminal.

Peut être suis je parti sur une mauvaise piste dés le départ... Je veux sauvegarder l'ensemble des sites web que j'ai pu créer et ce périodiquement.

Cette sauvegarde doit avoir au minimum les fichiers du serveur web et une copie de la BDD.

Les serveurs web sont des mutualisés et dédiés.
dutom007 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 13h57.


 
 
 
 
Partenaires

Hébergement Web