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

Conception Web Discussion :

Sauvegarder automatiquement son site sur Dropbox


Sujet :

Conception Web

  1. #1
    Membre actif
    Inscrit en
    Juillet 2013
    Messages
    772
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 772
    Points : 275
    Points
    275
    Par défaut Sauvegarder automatiquement son site sur Dropbox
    Bonjour,
    J'ai un site contenant un blog Wordpress et un forum phpbb + des pages php autonomes.
    Je souhaiterais sauvegarder l'ensemble de mon site, automatiquement et à intervalle choisi sur mon compte dropbox.
    L'idée m'est venu en utilisant l'extension UpdraftPlus de Wordpress qui fait une partie du job, limité à la sauvegarde des fichiers supposés "variables" du blog et à sa base de données.
    Mais je voudrais généraliser l'idée :
    - ne pas sauvegarder que les fichiers variables (thèmes, plugins etc...) mais tous les fichiers de mon site (on n'est jamais assez prudent) et pas seulement du blog
    - sauvegarder aussi la base de données SQL de mon forum et pas seulement la BdD de mon blog (ce que fait déjà UpdraftPlus).

    J'ai cherché un tuto sur le web, n'étant pas un pro de PHP mais je n'ai rien trouvé (ou alors le tuto n'était que partiel et mes connaissances limitées en PHP ne me permettaient pas de compléter.

    Quelqu'un pourrait-il m'orienter vers un tuto complet ?

  2. #2
    Membre expert
    Avatar de Spartacusply
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Points : 3 274
    Points
    3 274
    Par défaut
    Il suffit de mettre les fichiers que tu veux dans ton dropbox à intervalle régulier et ils seront envoyer sur les serveurs automatiquement.

    Sinon sache que si tu es sous linux, c'est hyper facile à faire (pour peu que tu es le droit de le faire), sous windows... ben j'en sais rien.
    Un message utile vous a aidé ? N'oubliez pas le

    www.simplifions.fr - Simplifier vos comptes entre amis !

  3. #3
    Membre actif
    Inscrit en
    Juillet 2013
    Messages
    772
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 772
    Points : 275
    Points
    275
    Par défaut
    Il suffit de mettre les fichiers que tu veux dans ton dropbox à intervalle régulier
    Le but est d'automatiser cette tâche justement.
    Sinon, je suis sous Windows

  4. #4
    Membre expert
    Avatar de Spartacusply
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Points : 3 274
    Points
    3 274
    Par défaut
    Copier-coller un fichier/dossier en ligne de commande n'est guère compliqué, tu te créé un script que tu lances dans une tâche planifiée et c'est terminé.

    Un peu d'info pour la copie : http://windows.developpez.com/cours/...ge=page_5#LV-C
    Un message utile vous a aidé ? N'oubliez pas le

    www.simplifions.fr - Simplifier vos comptes entre amis !

  5. #5
    Membre actif
    Inscrit en
    Juillet 2013
    Messages
    772
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 772
    Points : 275
    Points
    275
    Par défaut
    Je crois qu'on ne se comprend pas bien.
    Les fichiers de mon site sont sur un serveur web.
    Il y a 2 tâches à automatiser :
    - exporter les bdd sous forme de fichiers (type .sql éventuellement zippé)
    - transférer les fichiers de bdd et les fichiers des bdd vers mon compte dropbox (et non vers mon disque dur ou vers un autre répertoire du serveur de l'hébergeur)

  6. #6
    Membre expert
    Avatar de Spartacusply
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Points : 3 274
    Points
    3 274
    Par défaut
    Ton serveur, il tourne sous windows ou sous linux ? C'est le tien ou un mutalisé ? Quels droits as-tu dessus ?
    Un message utile vous a aidé ? N'oubliez pas le

    www.simplifions.fr - Simplifier vos comptes entre amis !

  7. #7
    Membre actif
    Inscrit en
    Juillet 2013
    Messages
    772
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 772
    Points : 275
    Points
    275
    Par défaut
    Mon site web est hébergé chez un hébergeur de site web : hostinger.
    De plus, je crois avoir mis en évidence le fait qu'il bloque les instructions php system().
    Je travaille sous windows.

  8. #8
    Membre actif
    Inscrit en
    Juillet 2013
    Messages
    772
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 772
    Points : 275
    Points
    275
    Par défaut
    J'ai testé 2 scripts.
    L'un recopie fichier par fichier le contenu de mon FTP depuis la racine vers DropBox.

    Code php : 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
    33
    34
    35
    36
    37
    38
    39
    <?php
    // edit this section
    $dropbox_email='logindropbox';  //Dropbox username
    $dropbox_pass="motdepassedropbox";   // Dropbox password
    $dropbox_dir='monsite/public_html'; //DropBox directory (optional) - Folder on the Dropbox 
     
    // don't need to edit below this section
    $backupdir = "/home/u654156753/public_html";
    $backupfiles = array();
     
    // la valeur donnée par dirname(__FILE__) n'est pas le répertoire courant. Il faut donc le spécifier.
    chdir($backupdir); 
    $backupfiles= find_all_files($backupdir);
     
    // envoie les fichiers sur Dropbox
    if ($backupfiles !=null) {
    	include('DropboxUploader.php');
    	$uploader = new DropboxUploader($dropbox_email, $dropbox_pass);
    	foreach ($backupfiles as $backupfile) {
    		$uploader->upload($backupfile,$dropbox_dir.str_replace($backupdir,'',dirname($backupfile)));
    	}
    }
     
     
    function find_all_files($dir)
    {
        $root = scandir($dir);
        foreach($root as $value)
        {
            if($value === '.' || $value === '..') {continue;}
            if(is_file("$dir/$value")) {$result[]="$dir/$value";continue;}
            foreach(find_all_files("$dir/$value") as $value)
            {
                $result[]=$value;
            }
        }
        return $result;
    } 
    ?>

    Problème : quelques fichiers sont effectivement envoyés vers Dropbox mais au bout d'un certain temps (30s environ), mon navigateur affiche une erreur 500 :

    Internal Server Error

    The server encountered an internal error or misconfiguration and was unable to complete your request.

    Please contact the server administrator at admin@main-hosting.eu to inform them of the time this error occurred, and the actions you performed just before this error.

    More information about this error may be available in the server error log.
    Visiblement le script est trop long pour le serveur de mon hébergeur. Je suppose que je ne peux rien y changer ???

    J'ai aussi essayé de produire un fichier ZIP de tous mes fichiers contenu dans le FTP.

    Code php : 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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    <?php
     
    class HZip
    {
      /**
       * Add files and sub-directories in a folder to zip file.
       * @param string $folder
       * @param ZipArchive $zipFile
       * @param int $exclusiveLength Number of text to be exclusived from the file path.
       */
      private static function folderToZip($folder, &$zipFile, $exclusiveLength) {
        $handle = opendir($folder);
        while (false !== $f = readdir($handle)) {
          if ($f != '.' && $f != '..') {
            $filePath = "$folder/$f";
            // Remove prefix from file path before add to zip.
            $localPath = substr($filePath, $exclusiveLength);
            if (is_file($filePath)) {
              $zipFile->addFile($filePath, $localPath);
            } elseif (is_dir($filePath)) {
              // Add sub-directory.
              $zipFile->addEmptyDir($localPath);
              self::folderToZip($filePath, $zipFile, $exclusiveLength);
            }
          }
        }
        closedir($handle);
      }
     
      /**
       * Zip a folder (include itself).
       * Usage:
       *   HZip::zipDir('/path/to/sourceDir', '/path/to/out.zip');
       *
       * @param string $sourcePath Path of directory to be zip.
       * @param string $outZipPath Path of output zip file.
       */
      public static function zipDir($sourcePath, $outZipPath)
      {
        $pathInfo = pathInfo($sourcePath);
        $parentPath = $pathInfo['dirname'];
        $dirName = $pathInfo['basename'];
     
        $z = new ZipArchive();
        $z->open($outZipPath, ZIPARCHIVE::CREATE);
        $z->addEmptyDir($dirName);
        self::folderToZip($sourcePath, $z, strlen("$parentPath/"));
        $z->close();
      }
    } 
     
     
    $backupdir = dirname(__FILE__);
    chdir($backupdir);
    HZip::zipDir('/home/u654156753/public_html', '/home/u654156753/export/public_html.zip'); 
    ?>

    Mais là aussi, au bout de quelques secondes, j'ai la même erreur que précédemment. Je suppose aussi que le script est trop long pour le serveur (ça prend du temps de zipper des centaines de Mo). J'ai vérifié que le code marche bien sur un petit zip (quelques 10aines de Mo maximum)

    Y a-t-il une solution pour contourner ces limitations ?

    Nota: j'avais bien trouvé cette appli mais elle est payante et chère en plus. Donc j'essaye de me débrouiller tout seul

  9. #9
    Membre actif
    Inscrit en
    Juillet 2013
    Messages
    772
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 772
    Points : 275
    Points
    275
    Par défaut
    Je relance la question du post précédent.
    Je constate que, quand j'utilise un plugin wordpress dédié à la compression à la sauvegarde, je n'ai pas de pb de time out.
    Alors pourquoi j'en ai avec mon script qui crée un gros ZIP ?

    EDIT : j'ai ouvert un topic spécifique pour cette question qui est de portée plus générale que le sujet de ce topic :
    http://www.developpez.net/forums/d15...t/#post8267883

  10. #10
    Membre actif
    Inscrit en
    Juillet 2013
    Messages
    772
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 772
    Points : 275
    Points
    275
    Par défaut
    Je n'ai jamais résolu mes pb de timeout alors j'ai continué à chercher du côté des plugins tout faits.
    Voici ma solution


    1°/ Le besoin :
    • j'ai un site web comportant une partie blog sous Wordpress, une partie forum sous PHPBB, et une partie "maison" faite de pages PHP de mon cru.
    • je veux sauvegarder tout mon site (les fichiers)
    • je veux sauvegarder les bdd du blog et du forum (2 bdd en tout)
    • je veux automatiser la sauvegarde à un fréquence définie, si possible différenciée pour les Bdd et les fichiers (plus fréquemment pour les Bdd)
    • je veux sauvegarder ailleurs que sur le FTP du site. Idéalement sur Dropbox (ou équivalent) car cela me permet, par synchronisation avec mon PC, de récupérer les sauvegardes automatiquement sur mon disque dur perso.

    2°/ La solution pour la Bdd Wordpress : ultra simple
    • utilisation du plugin BackWPup.
    • Programmation d'une opération de sauvegarde de la Bdd Wordpress dans le panneau d'admin du plugin.
    • Cette opération permet de définir : le nom du fichier de backup, la compression ou non du fichier, la fréquence de sauvegarde, et la possibilité de l'envoyer vers mon compte Dropbox


    3°/ La solution pour les fichiers de mon site : ultra simple
    • utilisation du plugin BackWPup encore !
    • ce plugin a la bonne idée de pouvoir sauvegarder tous les fichiers du site FTP depuis sa racine, et pas seulement ceux du blog. Je peux donc ainsi dire que je veux sauvegarder les fichiers de mon blog, mes pages PHP perso, et mon forum PHPBB
    • comme pour la BdD, il faut créer une opération avec le nom du fichier (perso, je préfère un ZIP), la fréquence et les paramètres d'envoi vers Dropbox


    4°/ La solution pour la BdD de mon forum PHPBB : en 2 temps
    • utilisation du plugin Auto Database Backup développé pour PHPBB.
    • ce plugin permet d'exporter à un fréquence choisie la Bdd sous forme de fichier
    • en revanche, on n'a pas le choix du stockage ni du nom du fichier : le fichier est stocké dans le répertoire /store/ de l'arborescence PHPBB. Ca se corrige (le nom du fichier et le lieu de stockage sur le FTP) en allant bidouiller les pages PHP du plugin, mais votre fichier sera de toute façon stocké sur le site FTP
    • j'ai donc développé un script sendgz2dropbox.php qui fait le complément du job, à savoir :
      • Envoi du fichier backup vers Dropbox
      • Suppression du fichier backup sur le FTP
    • Ce script utilise un autre script trouvé sur le net : DropboxUploader.php
    • Le fichier DropboxUploader.php doit être stocké dans le même répertoire que le fichier sendgz2dropbox.php
    • Ce répertoire ne doit pas se trouver dans la partie publique du FTP pour des raisons de sécurité car le fichier sendgz2dropbox.php contient mon login d'accès à mon compte dropbox. Par exemple, si votre répertoire public est "public_html", vous créez un répertoire "backup" au même niveau que "public_html" et non en aval de celui-ci, et vous y collez vos 2 fichiers PHP.
    • Il reste à mettre en place un lancement automatique du fichier sendgz2dropbox.php à la fréquence voulue pour que l'envoi vers Dropbox soit effectué. Cette fréquence est évidemment en rapport avec celle choisie pour la création du fichier de backup de la BdD. Ceci se fait depuis mon panneau d'administration de mon hébergeur web en programmant une tâche cron qui lance le fichier sendgz2dropbox.php à la fréquence voulue.


    Voilà le code de mon fichier sendgz2dropbox.php
    Code php : 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
    <?php
     
    // edit this section
    $dropbox_email='votre-adresse-e-mail';  //Dropbox username
    $dropbox_pass="motdepasseDropbox";   // Dropbox password
    $dropbox_dir='monsite'; //DropBox directory (optional) - Folder on the Dropbox 
     
    // don't need to edit below this section
    //$backupdir = dirname(__FILE__);
    $backupdir = '../public_html/forum/store'; //répertoire où l'on va chercher le fichier backup sur le FTP
    $backupfiles = array();
     
    // la valeur donnée par dirname(__FILE__) n'est pas le répertoire courant. Il faut donc le spécifier.
    chdir($backupdir); 
     
    // identifie les fichiers gz et les range dans un tableau
    foreach (glob("*.gz") as $file) {
    			$backupfiles[] = $file;
    }
     
    // envoie les fichiers GZ sur Dropbox et les efface sur le serveur
    if ($backupfiles !=null) {
    	include('DropboxUploader.php');
    	foreach ($backupfiles as $backupfile) {
    		$uploader = new DropboxUploader($dropbox_email, $dropbox_pass);
    		$uploader->upload($backupdir.'/'.$backupfile,$dropbox_dir);
    		unlink($backupfile); //supprime le fichier sur le FTP
    	}
    }
    ?>

    Si vous utilisez ce code, il faut l'adapter comme indiqué dans les commentaires. Dans ce cas précis, il traite les fichiers compressés au format .GZ. Si vous voulez l'utilisez pour des fichiers ZIP, il faut remplacer glob("*.gz") par glob("*.zip")

    5°/ Le résultat :
    • Automatiquement je récupère dans Dropbox 3 fichiers, dans le répertoire "monsite" :
    • Un fichier ZIP pour ma bdd Wordpress
    • Un fichier ZIP pour ma bdd PHPBB
    • Un fichier ZIP pour les fichiers de mon site.
    • Chacun de ces fichiers a un nom contenant l'horodatage. Il n'est donc pas écrasé à chaque sauvegarde. Il reste à supprimer manuellement les vieux fichiers de sauvegarde de temps en temps.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 9
    Dernier message: 20/01/2009, 12h29
  2. Sous vista tester son site sur IE6 et IE7
    Par Invité dans le forum Général Conception Web
    Réponses: 9
    Dernier message: 22/01/2008, 17h44
  3. Réponses: 2
    Dernier message: 03/12/2007, 21h24
  4. [Preferences] Sauvegarde automatique des préférences sur une vue
    Par pistache42 dans le forum Eclipse Platform
    Réponses: 10
    Dernier message: 04/12/2006, 11h32
  5. Réponses: 11
    Dernier message: 23/06/2006, 11h25

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