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 - Site pro : www.robertg-conseil.fr chez PHPNET, sites perso chez PlanetHoster + sites gérés chez PHPNET, PlanetHoster, Ionos et OVH

  • #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)
    Mon blog, on y parle Docker, PHP, WSL, Markdown et plein d'autres choses : https://www.avonture.be
    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)​

    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 - Site pro : www.robertg-conseil.fr chez PHPNET, sites perso chez PlanetHoster + sites gérés chez PHPNET, PlanetHoster, Ionos et OVH

      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)
        Mon blog, on y parle Docker, PHP, WSL, Markdown et plein d'autres choses : https://www.avonture.be
        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)​

        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 - Site pro : www.robertg-conseil.fr chez PHPNET, sites perso chez PlanetHoster + sites gérés chez PHPNET, PlanetHoster, Ionos et OVH

          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)
            Mon blog, on y parle Docker, PHP, WSL, Markdown et plein d'autres choses : https://www.avonture.be
            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)​

            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 - Site pro : www.robertg-conseil.fr chez PHPNET, sites perso chez PlanetHoster + sites gérés chez PHPNET, PlanetHoster, Ionos et OVH

              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 aime ceci.
                Christophe (cavo789)
                Mon blog, on y parle Docker, PHP, WSL, Markdown et plein d'autres choses : https://www.avonture.be
                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)​

                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 - Site pro : www.robertg-conseil.fr chez PHPNET, sites perso chez PlanetHoster + sites gérés chez PHPNET, PlanetHoster, Ionos et OVH

                  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 - Site pro : www.robertg-conseil.fr chez PHPNET, sites perso chez PlanetHoster + sites gérés chez PHPNET, PlanetHoster, Ionos et OVH

                    Commentaire


                    • #11
                      Avec plaisir Robert.
                      Christophe (cavo789)
                      Mon blog, on y parle Docker, PHP, WSL, Markdown et plein d'autres choses : https://www.avonture.be
                      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)​

                      Commentaire

                      Annonce

                      Réduire
                      Aucune annonce pour le moment.

                      Partenaire de l'association

                      Réduire

                      Hébergeur Web PlanetHoster
                      Travaille ...
                      X