Plugin de sauvegarde pour vos articles & commentaires

spardasparda Member
septembre 2016 modifié dans Plugins
J'ai conçu un petit plugin pour automatiser un peu la sauvegarde dans PluXml, il correspond surtout à mes besoins mais peut être qu'il pourra être utile à d'autres.

Il permet de créer et de télécharger des archives zip de vos données de manière régulière (envoi d'un mail avec un lien de téléchargement ou envoi de l'archive en pièce jointe). Il dispose d'une petite interface de configuration vous permettant de faire vos sauvegardes manuellement.

La vérification des archives se fait lors de l'affichage de l'administration (première page), l'inconvénient majeur est l'absence de sauvegarde "automatique" si vous ne vous connectez pas régulièrement à l'administration.

Vous devez disposer impérativement d'un hébergement avec la fonction mail() activée.

https://github.com/frapfrap/PluXML-plxContentBackup

Version FTP
Cette version offre la possibilité de faire votre sauvegarde sur un serveur FTP.

https://github.com/frapfrap/PluXML-PlxContentFtpBackup
«1

Réponses

  • StéphaneStéphane Member, Former PluXml Project Manager
    Hoo mais ça , ça m'a l'air très bon !!!

    Consultant PluXml

    Ancien responsable et développeur de PluXml (2010 à 2018)

  • GzygGzyg Member
    Il manque peut-être une petit fichier README avec la procédure d'installation ?

    En tout cas, superbe idée !!


    Merci, à plus,

    Gzyg
  • spardasparda Member
    La procédure est relativement simple puisqu'il suffit de mettre le dossier plxContentBackup dans le dossier plugins ;)
  • bg62bg62 Member
    mars 2011 modifié
    superbe idée !
    peut-on également réaliser cette sauvegarde ailleurs que sur l'hébergement, sans la fonction 'mail', comme certaine tâche 'cron' qui existent ?
    (ex : j'ai un compte de 10 Go chez free ...)
    là ce serait encore +
    et pour une sauvegarde complète ... images et autres comprises, c'est faisable en 'plugin' ?
    :)
  • Hello,

    Bien vu mais peut être serait il bien de faire de sorte qu'à la volé les archives se renommemt en une série de chffre genre MD5 car si l'archive contient le dossier configuration et son contenu alors ça ne va pas le faire... vous me comprenez ?

    Cdt
  • bg62bg62 Member
    re ...
    peut-être même une sauvegarde complète en s'inspirant de ceci :
    http://www.milletmaxime.net/3111-bash-backup-dlfree.html
    :)
  • Bonjour, j'en profite pour vous parler d'un petit script de sauvegarde que j'ai créé : Backupeur http://www.blogoflip.fr/?article97/backupeur-0-3-3 La condition est que vous ayez accès en ssh ou telnet à votre serveur.

    J'ai un string de l'array

  • LukeLuke Member
    Bonjour,

    Pour commencer, un grand BRAVO à l'équipe Pluxml !!! je ne connaissais pas et j'en suis franchement ravi :).

    Donc je viens à ce topic parce que j'ai une erreur quand je veux me rendre sur le plugin de backup...
    Fatal error: Class 'plxPlugin' not found in ............./plugins/plxContentBackup/plxContentBackup.php on line 9

    C'est peut être du fait que ma version soit en 5.0.2 ? J'espère que non parce que il me servirait ce ptit plugin..

    Merci d'avance pour vos réponses.
  • StéphaneStéphane Member, Former PluXml Project Manager
    Luke a écrit:
    Bonjour,

    Pour commencer, un grand BRAVO à l'équipe Pluxml !!! je ne connaissais pas et j'en suis franchement ravi :).

    Donc je viens à ce topic parce que j'ai une erreur quand je veux me rendre sur le plugin de backup...
    Fatal error: Class 'plxPlugin' not found in ............./plugins/plxContentBackup/plxContentBackup.php on line 9

    C'est peut être du fait que ma version soit en 5.0.2 ? J'espère que non parce que il me servirait ce ptit plugin..

    Merci d'avance pour vos réponses.
    oui ce n'est pas pour la 5.0.2
    Les plugins ne sont que depuis la version 5.1

    Consultant PluXml

    Ancien responsable et développeur de PluXml (2010 à 2018)

  • orx57orx57 Member
    Bonjour sparda,

    J'ai installé le plugin et après activation, en cliquant sur « configuration », j'obtiens une page blanche avec seulement le lien « « Retour à la page des plugins ». En analysant mes logs, je tombe sur la ligne suivante :

    [Mon Mar 28 20:38:10 2011] [error] [client $$$.$$$.$$$.$$$] PHP Fatal error: Class 'ZipArchive' not found in [...]/plugins/plxContentBackup/class/class.zip.php on line 18, referer: [...]/core/admin/parametres_plugins.php

    Je n'avais pas l'extension Zip chargé pour PHP. Je t'en fait part comme retour d'expérience, peut-être peux-tu le préciser comme pré-requis.

    Merci pour le plugin ;)

    @+
  • LukeLuke Member
    Stéphane a écrit:
    oui ce n'est pas pour la 5.0.2
    Les plugins ne sont que depuis la version 5.1
    Bien dommage ... enfin tant pis on attendra la version final.

    Merci
  • spardasparda Member
    Hello

    @artdesign j'ai volontairement omis les fichiers de configuration (dossier configuration) pour éviter de transmettre les pwd en clair

    @orx57 bien vu, j'ajoute ça dans la prochaine mise à jour

    @luke, j'avais bricoler le même plugin (sans l'espace d'administration) pour la 5.0, je te donne ça dès que j'ai le temps (demain peut-être)

    Sur ce, je vais me coucher :D
  • JohanJohan Member
    Hello,
    Je viens de me rendre compte d'un petit soucis avec ton plugin, rien de grave... ;)

    En fait, j'ai changé les répertoires par défaut de mon installation, les articles ne sont plus stockés dans le répertoire /data/articles, mais dans /data/mon_repertoire_d_articles (nom farfelu pour l'explication).
    Lorsque je tente de faire une sauvegarde avec cette configuration, j'obtiens le message d'erreur suivant :
    Notice: Packer :: « ../../data/articles/ » n'a pas été trouvé. in /Users/johan/Sites/sheevaboite.local/plugins/plxContentBackup/class/class.zip.php on line 118
    
    J'ai regardé le code et j'ai vu que les répertoires étaient settés en dur, ne serait-il pas possible de récupérer ces informations à partir de la conf ? J'ai regardé rapidement ce matin, mais je ne suis pas parvenu à trouver une réponse rapide à cette problématique...

    Voila !
    PS : Sinon le plugin marche très bien si je modifie les répertoires manuellement dans le fichier class.archive.php
  • spardasparda Member
    Hello :)

    Pour le moment, les dossiers sont en dur dans la class archive, mais je bosse sur une version qui permettra de choisir les dossiers présent dans /data depuis l'espace de configuration.

    Je travaille également sur une autre version qui permettra la sauvegarde sur FTP comme l'a suggérer @bg62 pour une sauvegarde complète (hormis fichiers contenant les mots de passe).

    ça arrive très prochainement en tout cas :)
  • JohanJohan Member
    Merci pour ces nouvelles sparda...
    En attendant j'ai customisé ton plugin pour mes besoins, mais ta nouvelle version a l'air géniale...
    J'ai hâte de pouvoir la tester... :)
  • spardasparda Member
    juin 2011 modifié
    Mise à jour & version FTP

    ----
    Nouvelle version "mail", ajoute la possibilité de choisir les dossiers sauvegardés à partir des dossiers sélectionnés lors de installation (plxadmin->aconf[])

    Téléchargement version 1.1


    Nouvelle version FTP inspirée des commentaires que j'ai reçu, fonctionne de la même manière mais sauvegarde sur un serveur FTP.

    Remarque:
    - Les tests avec dl.free.fr ne sont pas super concluant, impossibilité d'avoir la liste des fichiers uploadés et gros problèmes de connexions, mais ça fonctionne une fois sur 10 (même avec filezilla)..
    - Le bonton 'Télécharger la dernière sauvegarde disponible' peux vous produire une archive zip illisible selon le navigateur/configuration apache/logiciel de compression utilisé, je cherche encore une solution.

    Téléchargement version FTP - plxcontentbackupftp-1-0.zip

    Support de la version FTP

    Si vous rencontrez des bugs/avez des propositions d'amélioration, n'hésitez pas :)
  • Hello,
    Depuis la maj 5.1.1, j'ai un petit soucis avec le plugin ...
    J'ai cette erreur maintenant :
    Deprecated: Function set_magic_quotes_runtime() is deprecated in /var/www/xxx/plugins/plxContentBackup/class/class.phpmailer-lite.php on line 1232

    Deprecated: Function set_magic_quotes_runtime() is deprecated in /var/www/xxx/plugins/plxContentBackup/class/class.phpmailer-lite.php on line 1236
    Une sauvegarde automatique a été réalisée et a été expédiée par e-mail à: xxx@gmail.com

    C'est pas trop grave, mais voila quoi !
    Voila !
  • StéphaneStéphane Member, Former PluXml Project Manager
    Bonjour Johan

    cette erreur veut dire que la version de php installée sur ton serveur ne supporte plus la fonction set_magic_quotes_runtime(): ça n'a rien à voir avec pluxml.

    Consultant PluXml

    Ancien responsable et développeur de PluXml (2010 à 2018)

  • JohanJohan Member
    juillet 2011 modifié
    @Stéphane : Je ne disais pas que c'était un problème de PluXml, j'espérais juste que sparda allait pouvoir changer l'appel de cette fonction par quelque chose qui n'est pas déprécié... stou !

    Je vais regarder ca de mon coté... :p

    EDIT : Finalement, ce n'était pas long... J'ai remplacé les deux appels déprécié par :
    ini_set ("magic_quotes_runtime", 0);
    
    Et je n'ai plus le message... ;)
  • Bonjour,

    j'ai chargé le dossier dans le répertoire des plugins mais lorsque je vais sur la page de gestion des plugins, le plugin n'apparait pas dans la liste. (testé avec la plugin pour FTP et avec la plugin pour mail).
    Pluxml version 5.1.1

    Est-ce que vous avez une idée ? Merci.
  • Jerry WhamJerry Wham Member
    août 2011 modifié
    @jofdesign : il faut supprimer tous les underscores (_), les espaces et les majuscules (à remplacer par des minuscules) à la fois dans le nom du dossier et dans le nom du fichier d'appel de la classe (plxcontentbackup.php).

    Par contre, je ne comprends pas pourquoi, une fois cela fait, les informations du fichier infos.xml ne sont pas prises en compte. Je cherche et je vous tiens informés si je trouve quelque chose.

    Edit : je viens de trouver. Il faut également renommer la classe en plxcontentbackup (supprimer les majuscules).

    Je ne comprends par contre pas pourquoi cette convention ????

    Edit2 : il faut également modifier les "plxContentBackup" en "plxcontentbackup" dans le fichier "config.php" pour que le fichier parameters.xml soit modifié par le script.

    [del]Par contre, l'envoi de mail ne semble pas fonctionner malgré le message de confirmation. Je ne reçois rien.[/del] Au temps pour moi, les mails étaient considérés comme des spams.
  • StéphaneStéphane Member, Former PluXml Project Manager
    Tu peux choisir plxContentBackup ou plxcontentbackup indifféremment, seulement après il faut être cohérent dans tous les scripts et garder la même orthographe partout (idem avec le nom du dossier, les paramètres d'url, etc..) car tout simplement les hébergements sont sous linux, et linux et case-sensitive (et comme windows ne l'est pas, ça pose pas de problème d'utiliser à la fois plxContentBackup et plxcontentbackup)

    Consultant PluXml

    Ancien responsable et développeur de PluXml (2010 à 2018)

  • J'ai un peu modifié le script pour que l'on puisse télécharger l'archive sans être redirigé vers le dossier qui la contient car mon serveur m'en interdisait l'accès.

    Dans le fichier config.php, j'ai ajouter quelques lignes (de la ligne 33 à la ligne 45) :
    <?php if(!defined('PLX_ROOT')) exit; ?>
    <?php
    require_once('class/class.zip.php');
    require_once('class/class.phpmailer-lite.php');
    require_once('class/class.archive.php');
    
    $archive = new archive($plxPlugin->getParam('savedir'),$plxPlugin->getParam('days'),$plxPlugin->getParam('saved_dirs'));
    $archive->check();
    if(!empty($_POST)) {
    	$plxPlugin->setParam('savedir', $_POST['savedir'], 'string');
    	$plxPlugin->setParam('days', $_POST['days'], 'numeric');
    	$plxPlugin->setParam('email', $_POST['email'], 'string');
    	$plxPlugin->setParam('senderemail', $_POST['senderemail'], 'string');
    	$plxPlugin->setParam('sendername', $_POST['sendername'], 'string');
    	// on ajoute le répertoire 'data/' aux dossiers choisis
    	//while(list ($key, $val) = each ($_POST['data'])) { $_POST['data'][$key] = 'data/'.$val; }
    	$dirs = implode(',',$_POST['data']);
    	$plxPlugin->setParam('saved_dirs', $dirs, 'string');
    	// écriture des paramètres
    	$plxPlugin->saveParams();
    	header('Location: parametres_plugin.php?p=plxcontentbackup');
    	exit;
    }
    if($_GET['action'] == 'zip') {
    		$archive->zip();
    		plxMsg::Info('L\'archive a été crée avec succès');
    }
    if($_GET['action'] == 'mail') {
    	if($archive->sendmail($plxPlugin->getParam('email'),$plxPlugin->getParam('senderemail'),$plxPlugin->getParam('sendername'),$plxPlugin->getLang('L_TITLE'),$plxPlugin->getLang('L_CONTENT'))) { 
    		plxMsg::Info('L\'email a été envoyé avec succès'); 
    	}
    }
    
    if(isset($_GET['f']) && file_exists($plxPlugin->getParam('savedir').plxEncrypt::decryptId($_GET['f'])))
    {
    	ob_start();
    	header('Expires: 0');
    	header('Cache-Control: private');
    	header('Pragma: cache');
    	header('Content-Disposition: attachment; filename="'.plxEncrypt::decryptId($_GET['f']).'"');
    	header('Content-type: application/x-zip-compressed');
    	ob_end_clean();
    	readfile($plxPlugin->getParam('savedir').plxEncrypt::decryptId($_GET['f']));
    }
    
    ?>
    
    le reste du fichier étant le même.

    J'ai également modifié le fichier /class/class.archive.php en ajoutant ligne 17 :
    require_once(dirname(__FILE__).'/../../../core/admin/prepend.php');
    
    et en modifiant la ligne 185 en
    echo '<tr><td class="name"><a href="parametres_plugin.php?p=plxcontentbackup&f='.plxEncrypt::encryptId($file).'">'.$file.'</a></td><td>'.$this->format_bytes(filesize($dirname.$file)).'</td></tr>';
    
    On ne quitte maintenant plus la page pour télécharger l'archive.

    Seul bémol, l'archive est un peu modifiée (ajout d'entête) et cela peut poser problème sous Mac (pas testé sous GNU/Linux) si on tente de la dézipée avec les outils graphiques style Utilitaire d'archive ou Stuffit Expander. Bizarrement, aucun problème sous windows (avec 7zip).

    Pour l'ouvrir sous Mac, le seul moyen que j'ai trouvé et d'utiliser le Terminal et la commande "unzip" :
    unzip /Users/Jerry/Dowloads/archive.110806.zip -d /Users/Jerry/Dowloads
    
  • Nouvelle petite modification afin d'afficher un lien dans le menu principal de l'administration du site (le menu de gauche en noir et blanc).

    Ajout de la méthode AdminTopMenus dans le fichier plxcontentbackup.php
    /**
    	 * Méthode pour le hook AdminTopMenus
    	 *
    	 * Ajout d'un lien permanent dans le menu de l'administration vers le fichier de configuration
    	 *
    	 * @return	void
    	 * @author	Cyril MAGUIRE
    	 **/
    	public function AdminTopMenus() {
    		echo '<li><a title="'.L_PLUGINS_CONFIG_TITLE.'" href="parametres_plugin.php?p='.urlencode('plxcontentbackup').'">Sauvegardes</a></li>';
    	}
    
    et de l'appel du hook correspondant dans la méthode du constructeur (même fichier) :
    $this->addHook('AdminTopMenus', 'AdminTopMenus');
    
    En ajoutant ce code, un lien "Sauvegardes" s'affichera au-dessus du lien "Articles" du menu principal de l'administration du site.

    Enjoy :p
  • JohanJohan Member
    Bien pratique ce petit snippet de code Jerry !
    Bien joué, j'attend une nouvelle release de sparda... :)
  • Jerry WhamJerry Wham Member
    août 2011 modifié
    Nouvelle modification : le lien de sauvegarde ne doit s'afficher que si l'utilisateur a des droits d'administrateur. C'est chose faite en modifiant la méthode AdminTopMenus() :
    /**
    	 * Méthode pour le hook AdminTopMenus
    	 *
    	 * Ajout d'un lien vers la page de configuration du plugin si l'utilisateur est administrateur
    	 *
    	 * @return	void
    	 * @author	Cyril MAGUIRE
    	 **/
    	public function AdminTopMenus() {
    		if ($_SESSION['profil']==PROFIL_ADMIN){
    			echo '<li><a title="'.L_PLUGINS_CONFIG_TITLE.'" href="parametres_plugin.php?p='.urlencode('plxcontentbackup').'">Sauvegardes</a></li>';
    		}
    	}
    
    Enjoy :P
  • Bonjour,

    Ben moi, j'ai un message d'erreur dès que je clique sur 'Sauvegardes' ou bien 'Configuration' dans la liste des plugins :
    Fatal error: Class 'ZipArchive' not found in ...plugins/plxcontentbackup/class/class.zip.php on line 18
    
    J'ai essayé de voir, mais je ne trouve pas... Si vous avez une idée...

    Merci !

    Celfred.
  • StéphaneStéphane Member, Former PluXml Project Manager
    tu as bien décompressé l'archive dans le dossier plugins, de manière à avoir une arborescence plugins > plxcontentbackup avec dedans les fichiers du plugins

    Consultant PluXml

    Ancien responsable et développeur de PluXml (2010 à 2018)

  • Ben oui... J'ai opéré tous les changements de majuscules/minuscules précisés plus haut, j'ai revérifié... Tous les fichiers sont là... Je ne comprends pas.

    A tout hasard, voici les infos de mon Pluxml (je suis chez Free)
    Pluxml version 5.1.2 (encodage UTF-8)
        Version de php : 5.1.3RC4-dev
        Etat des "magic quotes" : 1
        ✔../../data/configuration/parametres.xml est accessible en écriture
        ✔../../data/configuration/categories.xml est accessible en écriture
        ✔../../data/configuration/statiques.xml est accessible en écriture
        ✔../../data/configuration/users.xml est accessible en écriture
        ✔../../data/configuration/tags.xml est accessible en écriture
        ✔../../data/articles/ est accessible en écriture
        ✔../../data/commentaires/ est accessible en écriture
        ✔../../data/statiques/ est accessible en écriture
        ✔../../data/images/ est accessible en écriture
        ✔../../data/documents/ est accessible en écriture
        ✔Bibliothèque GD installée
        ✔Fonction d'envoi de mail disponible
        Nombre de catégories : 5
        Nombre de pages statiques : 6
        Nom du rédacteur en session : FL
    
    Merci.

    Celfred.
Connectez-vous ou Inscrivez-vous pour répondre.