Problème load data infile

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

  • [RÉGLÉ] Problème load data infile

    Bonjour,

    j'avais créé un script il y a un bon moment maintenant, qui fonctionnait très bien, tous les jours par tache cron, puis du jour au lendemain, une erreur est apparue.

    L'erreur est : Error: Call to a member function get() on null:
    La partie du code concernée :
    Code PHP:
    $db JFactory::getDBO();
    $query 'LOAD DATA LOCAL INFILE "components/com_gixia/upload/pneus/'.$fichier.'"
                    REPLACE
                    INTO TABLE #__gixia_upload_pneus
                    FIELDS
                      TERMINATED BY ";"
                      ENCLOSED BY ""
                      ESCAPED BY "\"
                    LINES
                      STARTING BY ""
                      TERMINATED BY "\\n"
                      IGNORE 1 LINES (code,itemcode,description,type,marque_code,marque,groupe,groupe_desc,e_mark,european,largeur,ratio,diametre,charge_vitesse,prix_fournisseur,gross,stock,eancode,ip_code,photo,consomation,adherence,bruit_db,bruit_lvl,poids)'
    ;

                      echo 
    $query;

                
    $db->setQuery($query);
                
    $db->execute(); 
    Si je remplace la requête load data par une requête basique de type select, aucun plantage, mais il ne veut plus de mon load data ...

    Si quelqu'un a une idée ca serait top, merci beaucoup d 'avance !
    Dernière édition par Minie à 01/07/2019, 10h47

  • #2
    Bonjour

    Juste une précision s'il te plaît : ton erreur est " Error: Call to a member function get() on null:" mais ton code ne mentionne aucune méthode get(). Est-ce que le code que tu postes est bien celui qui génère l'erreur (==> lors de la mention de l'erreur il est aussi fait, normalement, mention d'un numéro de ligne; tu es certaine d'avoir posté la bonne partie du code?)

    Bonne journé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


    • #3
      Bonjour et merci pour ta réponse.

      oui, sur et certaine, ca me semble aussi très illogique, c'est pour ca que je ne trouve pas le souci.

      si je mets la ligne execute en commentaire, plus d'erreur (mais pas de requête non plus bien sur)

      si je remplace toute la requête par un select ou autre requête classique, plus d'erreur...

      et surtout l'erreur ne donne pas plus de précisions même en mode dev bien sûr

      en fait sauf si j'avais oublié le jFactory getDbo, je ne vois pas de rapport entre le type d'erreur et la partie posant problème

      Commentaire


      • #4
        Salut
        LOAD DATA LOCAL INFILE "components/com_gixia/upload/pneus/'.$fichier.'"
        2 questions.
        Es tu sur que c'est un chemin relatif qu'il faut mettre et non un chemin absolu?
        Quand je regarde la doc mysql, je ferai aussi attention au quote, doublequote et backquote.


        Apres, je ne suis pas tres a l'aise avec ce type de programmation.

        ++
        wis

        Commentaire


        • #5
          Salut,

          merci pour ta réponse, dans le doute j'ai quand même fait des tests pour répondre à tes questions.

          L'erreur se produit avec le chemin relatif comme absolu.
          L'erreur n'est pas SQL, la requête est correcte, elle fonctionnait très bien je n'y ai rien changé et je la fait en manuel à partir de php my admin tous les matin en attendant de régler le problème.

          Toujours pas trouvé de solution

          Commentaire


          • #6
            Ce type d'erreur correspond à une classe qui n'a pas pu être instanciée.

            Mais sans l'erreur au complet (fichier et numéro de ligne), impossible de t'aider.

            Si je comprend bien, ton script est lance par une tache cron et est autonome (donc lancé avec appel du framework de Joomla mais hors CMS).

            Si tu as accès aux logs regarde dans les logs d'erreur de php.
            Sinon demande l'affichage des erreurs php en début de script.

            Autre chose : as-tu testé ta requête sql avec phpmyadmin ?
            Dernière édition par roland_d_alsace à 08/05/2019, 13h00
            A tous les utilisateurs de Joomla du très Grand Est de la France et du Jura suisse
            Rejoignez le Joomla Users Groupe Alsace...
            roland_d_alsace va-t-il devenir roland_du_grand_est ?

            Commentaire


            • #7
              Merci pour vos réponses

              Envoyé par roland_d_alsace Voir le message
              Mais sans l'erreur au complet (fichier et numéro de ligne), impossible de t'aider.
              C'est justement ca mon problème, l'affichage des erreurs est en mode dev et je n'ai rien de plus, voici la totalité de l'erreur :

              Code:
              [B]Notice[/B]: Undefined property: Joomla\CMS\Document\ErrorDocument::$params in [B]***/templates/***/error.php[/B] on line [B]34[/B]
              Error: Call to a member function get() on null:
              Envoyé par roland_d_alsace Voir le message
              Si je comprend bien, ton script est lance par une tache cron et est autonome (donc lancé avec appel du framework de Joomla mais hors CMS).
              En fait le script est placé dans un article grâce au plugin d'insertion de code source, de façon à pouvoir appeler le framework Joomla. L'article est appelé par un lien de menu, et la tache cron dirige vers le lien de menu.

              Envoyé par roland_d_alsace Voir le message
              Si tu as accès aux logs regarde dans les logs d'erreur de php.
              En fait les logs disent la même chose que sur la page, ils renvoient au fichier error.php, sauf qu'ils ne donnent pas la seconde partie :

              Code:
              AH01071: Got error 'PHP message: PHP Notice: Undefined property: Joomla\\CMS\\Document\\ErrorDocument::$params in [URL="https://gixia.agency:8443/smb/file-manager/code-editor?currentDir=%2Fzone5.gixia.fr%2Fvar%2Fwww%2Fvhosts%2Fgixia.fr%2Fzone5.gixia.fr%2Ftemplates%2Frayonjantes&file=error.php&redirect=%2Fsmb%2Flog-file%2Fbrowser%2Fid%2F9"]***/templates/***/error.php[/URL] on line 34\n'
              Envoyé par roland_d_alsace Voir le message
              Autre chose : as-tu testé ta requête sql avec phpmyadmin ?
              Oui, tous les matins, je lance moi même la requête dans php my admin pour ensuite lancer manuellement le reste du script :'(

              Voici la ligne 34 du fichier error.php en question, ce n'est pas moi qui l'ai écrite, je me sert de template creator CK

              Code PHP:
              <?php if ($this->params->get('useresponsive','1')) { ?>
              Dernière édition par Minie à 09/05/2019, 09h51

              Commentaire


              • #8
                En fait le script est placé dans un article grâce au plugin d'insertion de code source, de façon à pouvoir appeler le framework Joomla. L'article est appelé par un lien de menu, et la tache cron dirige vers le lien de menu.
                Un truc, utilise la cli joomla pour créer ta tache cron.
                Ca sera 10 fois plus simple.

                Prend exemple sur un des scripts situés dans le dossier cli de ton joomla.
                tu verras les procédure d'import de classe et le fonctionnement général de la cli.
                Sur mes installations, toutes mes taches cron font appel à un script situé dans ce dossier.
                Et j'utilise le framework joomla.
                Ca fait un bail que je fait comme ca.
                https://extensions.refactory-project...ions-in-joomla



                ta tache cron sera du type sudo -u www-data -c 'php /var/www/html/cli/matache.php'

                LA tu as une liste des scripts et leur utilité en tant que tache cron.
                https://www.a2hosting.com/kb/install...e-command-line

                Et cela evolues en permanence
                https://community.joomla.org/gsoc-20...to-joomla.html

                La tu as une reelle idée de ce que vaux reellement joomla.
                Dernière édition par lefabdu51 à 10/05/2019, 19h14

                Commentaire


                • #9
                  Code:
                   
                   [B]Notice[/B]: Undefined property: Joomla\CMS\Document\ErrorDocument::$params in [B]***/templates/***/error.php[/B] on line [B]34[/B] Error: Call to a member function get() on null:
                  ton erreur parles du fichier error.php du template. La fonction attends une variable qui ne passe pas. ton $params doit être vide.

                  Commentaire


                  • #10
                    Bonjour,

                    merci pour les infos sur les CLI, je ferais mes taches cron comme ca maintenant en effet c'est bien mieux

                    Par contre, ca ne fonctionne toujours pas Le script se lance bien, pas de retour d'erreur, mais les données du fichier présent sur le serveur ne sont pas chargées dans la Bdd.

                    Sauf que maintenant je n'ai plus de piste puisque plus de message d'erreur.
                    (Je précise à nouveau que la requête est bonne, le fichier est valide, le chemin aussi, etc ... puisque je le fait manuellement et que ca fonctionnait avant.)

                    En ce qui concerne l'erreur que j'avais dans mon fichier error.php, c'est cette erreur (ligne 34) que j'ai à chaque fois que je fais appel à la bdd et que j'oublie le JFactory::getDBO() avant ma requête. C'est du coup toujours la seule piste que j'ai, si j'arrive à refaire fonctionner ma requête dans mon article, elle fonctionnera aussi dans le fichier CLI, j'en reviens donc à ma piste principale

                    Commentaire


                    • #11
                      Envoyé par Minie Voir le message
                      Bonjour,

                      ... c'est cette erreur (ligne 34) que j'ai à chaque fois que je fais appel à la bdd et que j'oublie le JFactory::getDBO() avant ma requête....
                      Il est sûr qu'avant d'utiliser une méthode d'une classe, il faut instancier la dite classe.

                      Dont si tu oublies le
                      Code PHP:
                      $db JFactory::getDBO(); 
                      ni la méthode setQuery, ni la méthode execute ne pourront fonctionner.

                      Normalement la classe JFactory est chargée dynamiquement par le framework (au moins jusqu'à Joomla 5).

                      Mais tu peux toujours rajouter un :
                      Code PHP:
                      use Joomla\CMS\Factory as JFactory
                      Au début de ton code.
                      Voir https://ordi-genie.com/joomla/develo...partir-de-j3-8

                      Mais je ne comprend pas le rapport entre l'erreur du fichier error.php et ton script.
                      Je ne pense pas que la non exécution de ta requete soit liée.

                      Pour plus de prudence, vu que tu ne connais pas l'environnement d’exécution du script (appelé dans un plugin de contenu), je n'utiliserai pas des noms de variables aussi génériques, ceci pour éviter toute interaction et de + j'effacerai toute mes variables après usage.

                      Donc plutôt un truc dans ce genre :
                      Code PHP:
                      $XYX123456db JFactory::getDBO();
                      $XYX123456query '...';

                      echo 
                      $XYX123456query;

                      $XYX123456db->setQuery($XYX123456query);
                      $XYX123456db->execute();

                      unset 
                      $XYX123456query;
                      unset 
                      $XYX123456db
                      Mais en CLI tu ne devrais pas avoir de problème, vu que tu maitrise tout le code.
                      Dernière édition par roland_d_alsace à 15/05/2019, 13h29
                      A tous les utilisateurs de Joomla du très Grand Est de la France et du Jura suisse
                      Rejoignez le Joomla Users Groupe Alsace...
                      roland_d_alsace va-t-il devenir roland_du_grand_est ?

                      Commentaire


                      • #12
                        Bien sur aucun souci pour le chargement de JFactory, j'ai parlé de cet oubli de temps en temps pour faire la relation entre l'erreur ligne 34 et le type de cause.

                        Pour ce qui est des conflits de variables, ce n'est pas ca, le script fonctionne si je remplace la requête de load data par un select ou autre requête bidon, par contre, la requête load data fonctionne nickel dans my SQL, donc pour le script, le problème c'est la requête, sauf que la requête est bonne.

                        Sans compter que ce script a fonctionné pendant des mois sans souci, du jour au lendemain, est arrivé l'erreur, peut être avec une maj joomla, rien ne me vient à l'esprit.

                        Commentaire


                        • #13
                          Salut
                          enlève le fichier "error.php" du template (en le renommant par exemple), et regarde si ça remarche
                          Envoie moi le fichier error.php par email pour que j'y jette un oeil
                          CEd
                          Vive Joomla! http://www.joomlack.fr Tutoriels et extensions pour Joomla!. Livre création de template Joomla de plus de 200 pages.
                          http://www.template-creator.com Outil de création de templates
                          Module Maximenu CK - Megamenu, multicolonnes, chargement de module, description de lien, deroulement animé - Compatible Virtuemart, Hikashop

                          Commentaire


                          • #14
                            Envoyé par Minie Voir le message
                            ...la requête load data fonctionne nickel dans my SQL, donc pour le script, le problème c'est la requête, sauf que la requête est bonne.
                            La requête fonctionne dans mysql en mode console ?

                            Et sous phpmyadmin tu confirmes bien qu'elle fonctionne aussi (sur le même serveur que ton script) ?
                            A tous les utilisateurs de Joomla du très Grand Est de la France et du Jura suisse
                            Rejoignez le Joomla Users Groupe Alsace...
                            roland_d_alsace va-t-il devenir roland_du_grand_est ?

                            Commentaire


                            • #15
                              Envoyé par ced1870 Voir le message
                              Salut
                              enlève le fichier "error.php" du template (en le renommant par exemple), et regarde si ça remarche
                              Envoie moi le fichier error.php par email pour que j'y jette un oeil
                              CEd
                              ced1870
                              Hello Ced.

                              Je pense que le message d'erreur et donc le problème du error.php n'a rien à voir avec le problème du script.
                              Il apparait juste parce que le script génère une erreur qui abouti à l'appel du error.php du template.

                              Enfin c'est mon avis, suite à cette réponse :
                              Envoyé par Minie Voir le message
                              Bien sur aucun souci pour le chargement de JFactory, j'ai parlé de cet oubli de temps en temps pour faire la relation entre l'erreur ligne 34 et le type de cause.
                              ...
                              Donc l'erreur apparait à chaque appel du error.php

                              Il ne devrait donc pas y avoir de rapport direct, mais cela reste à vérifier.

                              Le plus simple serait de tracer le code sous x-debug (c'est ce que je ferais pour avancer).

                              Minie : as-tu regardé s'il n'y avait pas + d'info dans les logs de Joomla et dans les logs de mysql, car l'erreur de la page d'erreur du template, doit masquer l'erreur du script, erreur pour laquelle cette page d'erreur est affichée justement.
                              Dernière édition par roland_d_alsace à 15/05/2019, 20h31
                              A tous les utilisateurs de Joomla du très Grand Est de la France et du Jura suisse
                              Rejoignez le Joomla Users Groupe Alsace...
                              roland_d_alsace va-t-il devenir roland_du_grand_est ?

                              Commentaire

                              Annonce

                              Réduire
                              Aucune annonce pour le moment.

                              Partenaire de l'association

                              Réduire

                              Hébergeur Web PlanetHoster
                              Travaille ...
                              X