LazyDbBackup horodatage

Réduire
X
  • Filtrer
  • Heure
  • Afficher
Tout effacer
nouveaux messages

  • [RÉGLÉ] LazyDbBackup horodatage

    Bonjour à tous !

    Il y a quelques temps, j'ai voulu horodater plus précisément les sauvegardes faites par LazyDbBackup en insérant le "T" pour le fuseau horaire.
    Après quelques tâtonnements liés à des erreurs de compatibilité avec certains serveurs, je suis arrivé à une version stable et définissant d'abord une variable, puis en l'utilisant plus loin dans le code.
    La variable
    $today1 = date("Y-m-dTH-i-s", time());
    Les lignes où elle est utilisée
    $today=JHtml::_('date', $today1, JText::_('Y-m-dTH-i-s'));

    $output = $body.': ' . JHtml::_('date', $today1, JText::_('DATE_FORMAT_LDB'));
    (je n'ai pas encore cherché comment laisser le choix du format à l'utilisateur, le résultat étant pour moi ""La base est en pièce jointe: lundi 6 mai 2019 01:14:09" et le nom de la sauvegarde incluant le nom du site suivi de 2019-05-06CEST01-14-09.215.sql)

    Malgré la déclaration de cette variable $today1, un utilisateur vient de me signaler cette erreur au niveau des deux lignes de son utilisation
    Notice: Undefined variable: today1 in lazydbbackup\lazydbbackup.php
    J'attends un complément d'information pour savoir avec quel nom est enregistrée la sauvegarde, si elle est vraiment générée, mais je ne comprends pas pourquoi elle apparaît comme "undefined variable", sachant que j'utilise LazyDbBackup chez divers hébergeurs sans incident.

    Quelqu'un aurait-il une idée de la cause de cette erreur ?
    Merci d'avance,
    Robert
    Dernière édition par RobertG à 11/05/2019, 15h23
    "Patience et longueur de temps font plus que force ni que rage..." (La Fontaine : Le Lion et le Rat) - "Il n'y a pas de problèmes; il n'y a que des solutions" (André Gide). MoovJla et LazyDbBackup sur www.joomxtensions.com - FaQ sur www.fontanil.info hébergés chez PHPNET - +sites gérés chez 1and1 et OVH - Site pro : www.robertg-conseil.fr

  • #2
    Salut Robert,

    Pourrais-tu poster un lien vers le fichier source au complet et indiquer le numéro de ligne de l'erreur ? Je tâcherai de jeter un œil à ton code ensuite.
    Christophe (cavo789)
    Logiciel gratuit de scan antivirus : https://github.com/cavo789/aesecure_quickscan (plus de 45.000 virus détectés, 700.000 fichiers sur liste blanche)
    Développeur de marknotes, logiciel de gestion de prises de notes avec interface web et de multiples convertisseur https://github.com/cavo789/marknotes
    Mes logiciels OpenSource : https://www.avonture.be

    Commentaire


    • #3
      Merci Christophe,

      Le pack est disponible ici : https://www.joomxtensions.com/compon...p-3-8-5-mysqli
      Il a été modifié le mois dernier suite à une erreur qu'avait rencontrée Gerald Berger (de Gary's Cookbook) sur des serveurs Strato qui renvoyaient "MEST" au lieu de "CEST" ou de "UTC".

      La variable est définie ligne 17, les lignes en erreur sont 201 et 393
      Dernière édition par RobertG à 07/05/2019, 16h35
      "Patience et longueur de temps font plus que force ni que rage..." (La Fontaine : Le Lion et le Rat) - "Il n'y a pas de problèmes; il n'y a que des solutions" (André Gide). MoovJla et LazyDbBackup sur www.joomxtensions.com - FaQ sur www.fontanil.info hébergés chez PHPNET - +sites gérés chez 1and1 et OVH - Site pro : www.robertg-conseil.fr

      Commentaire


      • #4
        Bonsoir

        J'ai tout d'abord fait un php-cs-fixer pour reformater le code sur ma machine. Je te propose de le trouver ici : https://gist.github.com/cavo789/c3d6...4367f70b8dd52c

        Et là, tout apparaît de manière bien plus claire; tu as une erreur de conception dans ton plugin.

        Tu déclares effectivement ta variable en ligne 18 (nouvelle numérotation)

        Code PHP:
        $today1 date('Y-m-dTH-i-s'time()); // RRG 2019/04/02 
        Et tu l'utilises en ligne 230 (nouvelle numérotation) mais ... cette ligne 230 est dans la déclaration de ton plugin `class plgSystemLazyDbBackup extends JPlugin` (ligne 100) ==> le souci est donc d'utiliser une variable dans une classe qui est déclarée en dehors de cette classe.

        En "bonne" programmation, c'est interdit. La classe doit être indépendante; tout "du dehors" doit lui être passé sous forme de paramètre.

        Dans ton cas de figure, je propose de vérifier s'il existe un constructeur pour les plugins Joomla (sorry, je n'en fais plus depuis des années). Et si tu as un constructeur, il faudrait alors déclarer $today1 là-bas afin que la variable soit accessible dans ton plugin.

        Bonne soirée.
        Christophe (cavo789)
        Logiciel gratuit de scan antivirus : https://github.com/cavo789/aesecure_quickscan (plus de 45.000 virus détectés, 700.000 fichiers sur liste blanche)
        Développeur de marknotes, logiciel de gestion de prises de notes avec interface web et de multiples convertisseur https://github.com/cavo789/marknotes
        Mes logiciels OpenSource : https://www.avonture.be

        Commentaire


        • #5
          Merci Christophe,

          En effet, j'ai ajouté cette définition sans faire attention où... Mais ce que je ne comprends pas c'est pourquoi ça fonctionne sur la plupart des serveurs ($today1 est bien considérée comme une variable définie et bien utilisée dans le nom du fichier de sauvegarde et du corps du mail) et pas sur d'autres.
          "Patience et longueur de temps font plus que force ni que rage..." (La Fontaine : Le Lion et le Rat) - "Il n'y a pas de problèmes; il n'y a que des solutions" (André Gide). MoovJla et LazyDbBackup sur www.joomxtensions.com - FaQ sur www.fontanil.info hébergés chez PHPNET - +sites gérés chez 1and1 et OVH - Site pro : www.robertg-conseil.fr

          Commentaire


          • #6
            Hello

            La version de PHP ? Plus on monte dans la version (7.x); plus l'interpréteur devient strict et le code qui était déjà noté comme déprécié est maintenant refusé (ce qui est une bonne chose mais exige de toujours avoir du code valide).
            Christophe (cavo789)
            Logiciel gratuit de scan antivirus : https://github.com/cavo789/aesecure_quickscan (plus de 45.000 virus détectés, 700.000 fichiers sur liste blanche)
            Développeur de marknotes, logiciel de gestion de prises de notes avec interface web et de multiples convertisseur https://github.com/cavo789/marknotes
            Mes logiciels OpenSource : https://www.avonture.be

            Commentaire


            • #7
              Je n'ai pourtant pas de problème sur des sites de test en 7.3

              Je viens de tester la déclaration de $today1 ($public today1 juste après la définition de la classe : pas d'erreur, mais si je définis $today1 comme une date, donc en lui donnant une valeur, je plante le site.
              En définissant simplement cette variable sans sa valeur, sur mon serveur en PHP 7.2, les lignes utilisant cette variable pour définir l'horodatage du fichier et reporter cette valeur de date dans le corps du mail fonctionnent sans erreur.

              Ici ça fonctionne :
              class plgSystemLazyDbBackup extends JPlugin
              {
              public $today1 ;
              mais pas là
              class plgSystemLazyDbBackup extends JPlugin
              {
              public $today1 = date('Y-m-dTH-i-s', time());
              Pourtant, dans un exemple de plugin, je trouve une définition où la valeur est donnée
              public $_has_tags = true;
              Malgré la lecture du livre de Marc sur la création d'extensions pour Joomla!, je ne comprends pas...
              "Patience et longueur de temps font plus que force ni que rage..." (La Fontaine : Le Lion et le Rat) - "Il n'y a pas de problèmes; il n'y a que des solutions" (André Gide). MoovJla et LazyDbBackup sur www.joomxtensions.com - FaQ sur www.fontanil.info hébergés chez PHPNET - +sites gérés chez 1and1 et OVH - Site pro : www.robertg-conseil.fr

              Commentaire


              • #8
                Tu peux initialiser une variable à une valeur simple (true/false/0/1/'bonjour') mais jamais faire appel à une fonction. La ligne ci-dessous est donc syntaxiquement incorrecte.
                C'est pourquoi j'ai parlé de constructeur hier.

                Code PHP:
                public $today1 date('Y-m-dTH-i-s'time()); 
                En PHP pur, un constructeur, c'est ceci :

                Code PHP:
                class BaseClass {
                   function 
                __construct() {
                      print 
                "In BaseClass constructor\n";
                   }

                Du coup, essaie de déclarer une telle fonction et voir si Joomla fait aussi appel à cette fonction. (le nom est toujours "__construct()")

                Ton code deviendrait (je n'ai pas testé)

                Code PHP:
                class plgSystemLazyDbBackup extends JPlugin
                {
                   private 
                $today1'' ;

                   function 
                __construct() {
                      
                $this->today1 =date('Y-m-dTH-i-s'time());
                   }


                et si cela passe, tu peux donc utiliser $this->today1 au sein de ton plugin.

                A++
                RobertG likes this.
                Christophe (cavo789)
                Logiciel gratuit de scan antivirus : https://github.com/cavo789/aesecure_quickscan (plus de 45.000 virus détectés, 700.000 fichiers sur liste blanche)
                Développeur de marknotes, logiciel de gestion de prises de notes avec interface web et de multiples convertisseur https://github.com/cavo789/marknotes
                Mes logiciels OpenSource : https://www.avonture.be

                Commentaire


                • #9
                  Merci pour ces explications !

                  J'ai testé cet ajout de __construct : sans paramètres ça fonctionne sans erreur, mais avec __construct(&$subject, $config = array()), le fonction date renvoie une erreur sur le premier chiffre de l'heure, plantant le plugin, ce que m'avait rapporté Gerald Berger sur les serveurs Strato avec la version 3.8.4 où je n'utilisais pas $today1 mais directement la fonction date formatée pour le nom du fichier..

                  Finalement, j'ai abandonné cette function __construct() et "$today1", défini $today (qui est utilisé plus loin) juste après la définition de la classe, puis dans public function onAfterInitialise() je lui ai affecté la valeur que j'utilise telle quelle dans le nom du fichier, sans nouveau formatage.
                  Et à la fin du fichier, je refais un formatage pour avoir date et heure en clair dans le corps du message.
                  Pour le moment tout fonctionne sur mon serveur de tests.

                  Il reste à vérifier sur d'autres serveurs...
                  "Patience et longueur de temps font plus que force ni que rage..." (La Fontaine : Le Lion et le Rat) - "Il n'y a pas de problèmes; il n'y a que des solutions" (André Gide). MoovJla et LazyDbBackup sur www.joomxtensions.com - FaQ sur www.fontanil.info hébergés chez PHPNET - +sites gérés chez 1and1 et OVH - Site pro : www.robertg-conseil.fr

                  Commentaire


                  • #10
                    Encore merci Christophe pour ton aide !

                    La version 3.8.6 a été testée avec succès sur plusieurs serveurs dont ceux qui avaient récemment ou précédemment posé ce problème de date.
                    Je vais donc pouvoir la mettre à disposition de tous.
                    "Patience et longueur de temps font plus que force ni que rage..." (La Fontaine : Le Lion et le Rat) - "Il n'y a pas de problèmes; il n'y a que des solutions" (André Gide). MoovJla et LazyDbBackup sur www.joomxtensions.com - FaQ sur www.fontanil.info hébergés chez PHPNET - +sites gérés chez 1and1 et OVH - Site pro : www.robertg-conseil.fr

                    Commentaire


                    • #11
                      Avec plaisir Robert.
                      Christophe (cavo789)
                      Logiciel gratuit de scan antivirus : https://github.com/cavo789/aesecure_quickscan (plus de 45.000 virus détectés, 700.000 fichiers sur liste blanche)
                      Développeur de marknotes, logiciel de gestion de prises de notes avec interface web et de multiples convertisseur https://github.com/cavo789/marknotes
                      Mes logiciels OpenSource : https://www.avonture.be

                      Commentaire

                      Annonce

                      Réduire
                      1 sur 2 < >

                      C'est [Réglé] et on n'en parle plus ?

                      A quoi ça sert ?
                      La mention [Réglé] permet aux visiteurs d'identifier rapidement les messages qui ont trouvé une solution.

                      Merci donc d'utiliser cette fonctionnalité afin de faciliter la navigation et la recherche d'informations de tous sur le forum.

                      Si vous deviez oublier de porter cette mention, nous nous permettrons de le faire à votre place... mais seulement une fois
                      Comment ajouter la mention [Réglé] à votre discussion ?
                      1 - Aller sur votre discussion et éditer votre premier message :


                      2 - Cliquer sur la liste déroulante Préfixe.

                      3 - Choisir le préfixe [Réglé].


                      4 - Et voilà… votre discussion est désormais identifiée comme réglée.

                      2 sur 2 < >

                      Assistance au forum - Outil de publication d'infos de votre site

                      Compatibilité: PHP 4.1,PHP4, 5, 6DEV MySQL 3.2 - 5.5 MySQLi from 4.1 ( @ >=PHP 4.4.9)

                      Support Version de Joomla! : | J!3.0 | J!2.5.xx | J!1.7.xx | J!1.6.xx | J1.5.xx | J!1.0.xx |

                      Version française (FR) D'autres versions sont disponibles depuis la version originale de FPA

                      UTILISER À VOS PROPRES RISQUES :
                      L'exactitude et l'exhaustivité de ce script ainsi que la documentation ne sont pas garanties et aucune responsabilité ne sera acceptée pour tout dommage, questions ou confusion provoquée par l'utilisation de ce script.

                      Problèmes connus :
                      FPA n'est actuellement pas compatible avec des sites Joomla qui ont eu leur fichier configuration.php déplacé en dehors du répertoire public_html.

                      Installation :

                      1. Téléchargez l'archive souhaitée : http://afuj.github.io/FPA/

                      Archive zip : https://github.com/AFUJ/FPA/zipball/master

                      2. Décompressez le fichier de package téléchargé sur votre propre ordinateur (à l'aide de WinZip ou d'un outil de décompression natif).

                      3. Lisez le fichier LISEZMOI inclus pour toutes les notes de versions spécifiques.

                      4. LIRE le fichier de documentation inclus pour obtenir des instructions d'utilisation détaillées.

                      5. Téléchargez le script fpa-fr.php à la racine de votre site Joomla!. C'est l'endroit que vous avez installé Joomla et ce n'est pas la racine principale de votre serveur. Voir les exemples ci-dessous.

                      6. Exécutez le script via votre navigateur en tapant: http:// www. votresite .com/ fpa-fr.php
                      et remplacer www. votresite .com par votre nom de domaine


                      Exemples:
                      Joomla! est installé dans votre répertoire web et vous avez installé la version française du fichier FPA:
                      Télécharger le script fpa-fr.php dans: /public_html/
                      Pour executer le script: http://www..com/fpa-fr.php

                      Joomla! est installé dans un sous-répertoire nommé "cms" et vous avez installé la version française du fichier FPA:
                      Télécharger le script fpa-fr.php dans: /public_html/cms/
                      Pour executer le script: http://www..com/cms/fpa-fr.php

                      En raison de la nature très sensible de l'information affichée par le script FPA, il doit être retiré immédiatement du serveur après son utilisation.

                      Pour supprimer le script de votre site, utilisez le lien de script de suppression fourni en haut de la page du script. Si le lien de suppression échoue pour supprimer le script, utilisez votre programme FTP pour le supprimer manuellement ou changer le nom une fois que le script a généré les données du site et le message publié sur le forum. Si le script est toujours présent sur le site, il peut être utilisé pour recueillir suffisamment d'informations pour pirater votre site. Le retrait du script empêche des étrangers de l'utiliser pour jeter un oeil à la façon dont votre site est structuré et de détecter les défauts qui peuvent être utilisé à vos dépends.
                      Voir plus
                      Voir moins

                      Partenaire de l'association

                      Réduire

                      Hébergeur Web PlanetHoster
                      Travaille ...
                      X