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)
    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
      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.
        https://dev.mysql.com/doc/refman/8.0/en/load-data.html

        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:
              Notice: Undefined property: Joomla\CMS\Document\ErrorDocument::$params in ***/templates/***/error.php on line 34
              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 ***/templates/***/error.php 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

                https://forum.joomla.org/viewtopic.php?t=664532

                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
                Mon site en cours de construction avec de nouvelles catégories de documents...
                https://informaticien51.fr

                Commentaire


                • #9
                  Code:
                   
                   Notice: Undefined property: Joomla\CMS\Document\ErrorDocument::$params in ***/templates/***/error.php on line 34 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.
                  Mon site en cours de construction avec de nouvelles catégories de documents...
                  https://informaticien51.fr

                  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
                              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