IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Script de sauvegarde FTP Distant vers Local


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Août 2009
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 55
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 182
    Par défaut
    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?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Août 2009
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 55
    Par défaut
    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...

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 182
    Par défaut
    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.

  5. #5
    Membre Expert
    Avatar de gene69
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 769
    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 : 1 769
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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).

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Août 2009
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 55
    Par défaut
    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.

Discussions similaires

  1. Script qui sauvegarde l'ftp et l'envoie ver une autre ftp
    Par DolomatS dans le forum Webmarketing
    Réponses: 4
    Dernier message: 29/01/2013, 23h48
  2. Copier une table de distant vers local.
    Par yann123456 dans le forum Administration
    Réponses: 0
    Dernier message: 29/09/2009, 17h39
  3. Réponses: 5
    Dernier message: 30/07/2008, 08h06
  4. Script de sauvegarde FTP
    Par goldorax113 dans le forum Développement
    Réponses: 5
    Dernier message: 09/11/2006, 11h08
  5. Réponses: 4
    Dernier message: 06/01/2006, 19h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo