messages d'erreur plus explicites

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

  • [RÉGLÉ] messages d'erreur plus explicites

    Bonjour,
    Depuis les modifications de la gestion des erreurs j'obtiens des messages très peu explicites comme:

    Une erreur s'est produite
    0 syntax error, unexpected 'false' (T_STRING)
    Sans autre information. Est ce possible d'améliorer la précision de ces messages pour obtenir au moins le fichier en cause, voir la ligne reponsable ?
    Dernière édition par kmchen à 06/11/2019, 01h45
    Thierry CHEN
    http://www.webologix.com création site internet
    http://www.php-web-service.net Développeur WEB
    http://www.joomla-development.eu Développement d'extensions Joomla

  • #2
    Bonjour Thierry

    Réponse hyper générique que la mienne : les erreurs sont provoquées par tant et plus de sources; cela peut être Joomla lui-même, mais aussi le serveur, une extension (plugin, module, composant), le template, ...

    Il faudrait que tu puisses identifier exactement "qui" est à l'origine de l'erreur, dans quel contexte que tu l'as rencontré et remonter l'information à la bonne personne.

    Si c'est une erreur dans un composant, remonter l'erreur au développeur du composant.

    Si c'est une erreur dans le code source de Joomla, remonter l'erreur aux développeurs core de Joomla. Dans ce cas de figure, tu peux les joindre en créant une issue sur https://github.com/joomla/joomla-cms/issues.

    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,

      Mettre le rapport d'erreurs à "Dévelopement" et activer le débogage permet souvent de savoir quel est le fichier, ou au moins l'extension, en cause.
      Compte tenu du message, je dirais qu'il s'agit d'un problème de version de PHP (modifiée récemment ?).
      "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 hébergés chez PHPNET - sites perso chez PlanetHoster + sites gérés chez 1and1 et OVH

      Commentaire


      • #4
        Merci beaucoup pour vos réponses. J'ai résolu le problème entre temps via les logs apache mais ce n'est pas la première fois que je constate la lourdeur et l'inconcistance du nouveau système de gestion d'erreurs de joomla et je voulais juste échanger sur la manière dont vous vous en acomodez. Personnellement je trouve fastidieux d'avoir à chercher dans les justement devenus nombreux logs (apache2, php-fpm, everthing.php, error.php, etc...) pour une simple erreur de syntaxe dont on pourrait simplement afficher la source lorsqu'on la rencontre, il me semble.

        J'ai donc reproduit une erreurde syntaxe en enlevant une acolade sur un script de composant en cours de développement. Lorsque j'accède au script j'obtiens le message en question. Mais lorsque je passe le rapport d'erreur en mode "développement" c'est pire: j'obtiens 3 warning deprecated et le message d'erreur de syntaxe disparait !
        Thierry CHEN
        http://www.webologix.com création site internet
        http://www.php-web-service.net Développeur WEB
        http://www.joomla-development.eu Développement d'extensions Joomla

        Commentaire


        • #5
          Bonsoir Thierry,

          Mettre le rapport d'erreurs à Développement ne suffit pas en général, il faut aussi activer le débogage système( onglet Système) comme évoqué par Robert.

          Sinon, effectivement, on va un peu à la pêche.

          Pascal
          If anything can go wrong, it will...
          If I can help, I will ..https://conseilgouz.com

          Commentaire


          • #6
            Un autre cas similaire: j'ai fait un replace massif dans un composant à upgrader pour joomla 3, de JREQUEST / JINPUT de la forme:
            Code:
            JREQUEST::getCmd('var') par $jinput->get('var')
            où $jinput a été la plupart du temps défini plus haut dans les scripts par
            Code:
            $jinput = new Jinput();
            Mais bien sûr dans certains scripts il n'est pas défini et je pensais trouver rapidement les cas par les messages d'erreur (error_reporting à "development" et plugin log everything activé). Joomla affiche l'erreur suivante:
            0 - Call to a member function get() on null
            Et voici ce que j'obtiens dans les logs:

            everything.php:
            Code:
            2019-11-05T08:32:38+00:00       CRITICAL 127.0.0.1      error   Uncaught \Throwable of type Error thrown. Stack trace: #0 /home/www/lef/libraries/src/Helper/ModuleHelper.php(201): include()
            #1 /home/www/lef/libraries/src/Document/Renderer/Html/ModuleRenderer.php(98): Joomla\CMS\Helper\ModuleHelper::renderModule(Object(stdClass), Array)
            #2 /home/www/lef/libraries/src/Document/Renderer/Html/ModulesRenderer.php(47): Joomla\CMS\Document\Renderer\Html\ModuleRenderer->render(Object(stdClass), Array, NULL)
            #3 /home/www/lef/libraries/src/Document/HtmlDocument.php(491): Joomla\CMS\Document\Renderer\Html\ModulesRenderer->render('user1', Array, NULL)
            #4 /home/www/lef/libraries/src/Document/HtmlDocument.php(783): Joomla\CMS\Document\HtmlDocument->getBuffer('modules', 'user1', Array)
            #5 /home/www/lef/libraries/src/Document/HtmlDocument.php(557): Joomla\CMS\Document\HtmlDocument->_renderTemplate()
            #6 /home/www/lef/libraries/src/Application/CMSApplication.php(1041): Joomla\CMS\Document\HtmlDocument->render(false, Array)
            #7 /home/www/lef/libraries/src/Application/SiteApplication.php(780): Joomla\CMS\Application\CMSApplication->render()
            #8 /home/www/lef/libraries/src/Application/CMSApplication.php(201): Joomla\CMS\Application\SiteApplication->render()
            #9 /home/www/lef/index.php(49): Joomla\CMS\Application\CMSApplication->execute()
            #10 {main
            Dites moi qu'il y a un moyen de trouver où se niche la ligne en erreur sans suivre les scripts pas à pas depuis la dernière ligne de la pile
            Thierry CHEN
            http://www.webologix.com création site internet
            http://www.php-web-service.net Développeur WEB
            http://www.joomla-development.eu Développement d'extensions Joomla

            Commentaire


            • #7
              Bonjour Thierry

              Deux petites choses :

              1. Quand une erreur PHP est rencontrée; sauf exception, c'est l'interpréteur PHP qui affiche l'erreur et qui l'écrit dans le log des erreurs Apache.

              Si j'ai un script php qui tente de supprimer un fichier inexistant, c'est PHP lui-même qui va rouspéter. Joomla est donc hors cause.

              Exceptionnellement, le développeur PHP peut lui-même "jeter" une erreur avec un throw new Exception mais ce n'est pas le cas ici je pense.

              (donc, ne pas croire que "c'est la faute des développeurs de Joomla qui écrivent des messages d'erreurs abscons")

              2. Quand tu fais du développement PHP, il est bon d'utiliser un déboggeur. PHP XDEBUG en est un. Tu peux l'intégrer à ton IDE (par exemple Atom ou VSCode) et exécuter ton code (CTRL-F5). Ensuite, tu affiches ta page web et le déboggeur va planter le code et t'afficher le code source lorsqu'il rencontre une exception. Tu pourrais donc, grâce à XDebug, localiser bien plus rapidement les erreurs que de parcourir les fichiers par toi-même.

              Bonne prog'
              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


              • #8
                Complément : notre ami roland_d_alsace est un développeur PHP / Joomla et il a rédigé un tuto sur l'installation de xdebug avec NetBeans; voici son tuto : https://ordi-genie.com/developpement...indows?start=1

                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


                • #9
                  Envoyé par cavo789 Voir le message
                  Complément : notre ami roland_d_alsace est un développeur PHP / Joomla et il a rédigé un tuto sur l'installation de xdebug avec NetBeans; voici son tuto : https://ordi-genie.com/developpement...indows?start=1

                  Bonne journée.
                  Merci Christophe.

                  Ce tuto est un peu ancien, et aujourd'hui xdebug est préinstallé avec la plupart des serveurs amp (wamp par exemple).

                  Je rajouterai qu'en débogage je mets toujours un point d’arrêt dans /plugin/system/redirect/redirect.php à la liste 84 (méthode handleException).

                  Voir mon article sur le débogage sous Joomla ici : https://ordi-genie.com/joomla/developpement paragraphe : débogage au développement
                  Dernière édition par roland_d_alsace à 05/11/2019, 22h52
                  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


                  • #10

                    Bonjour et merci pour vos réponses.

                    Envoyé par cavo789 Voir le message
                    c'est l'interpréteur PHP qui affiche l'erreur et qui l'écrit dans le log des erreurs Apache
                    Cavo comme tu peux voir l'exception est rapportée dans everything.php et non apache/error.log et le message "Call to a member function get() on null" qui est la véritable erreur est affichée par joomla dans le navigateur.

                    J'utilise Xdebug et j'ai depuis débuggé le problème. D'après ce que j'ai pu observer le script Joomla ModuleRenderer.php qui fait un include d'un module tiers qui était à l'origine de l'erreur (utilisation de $jinput->get avec $jinput non défini) récupère (catch) l'exception générée par PHP et en affiche le message d'erreur.

                    Mais il est bien dommage qu'il omette de spécifier le script et la ligne qui ont généré l'erreur et qui sont mis à disposition par PHP lors du déclenchement d'une exception CF https://www.php.net/manual/en/exception.getline.php. Car si les développeurs Joomla avaient pris la peine de rapporter ces détails Xdebug serait inutile sur des bugs aussi grossiers et j'aurai passé 5s pour chaque bug au lieu de 5mn. Ce n'est pas négligeable quand on est travailleur indépendant et si on réfléchit à l'échelle de la communauté des développeurs Joomla et de ses clients...on pense à l'effet papillon

                    Je rajouterai qu'en débogage je mets toujours un point d’arrêt dans /plugin/system/redirect/redirect.php à la liste 84 (méthode handleException).
                    Roland: effectivement c'est la meilleure méthode que j'ai trouvée pour palier à la carence de la gestion d'erreur Joomla.
                    Je pense que c'est la meilleure réponse qui convient à ce post
                    Dernière édition par kmchen à 06/11/2019, 01h44
                    Thierry CHEN
                    http://www.webologix.com création site internet
                    http://www.php-web-service.net Développeur WEB
                    http://www.joomla-development.eu Développement d'extensions Joomla

                    Commentaire


                    • #11
                      Bonjour

                      Envoyé par kmchen Voir le message
                      D'après ce que j'ai pu observer le script Joomla ModuleRenderer.php qui fait un include d'un module tiers qui était à l'origine de l'erreur (utilisation de $jinput->get avec $jinput non défini) récupère (catch) l'exception générée par PHP et en affiche le message d'erreur.
                      Donc, ce n'est ni Joomla (core) qui était à l'origine du problème et l'erreur est bien générée par PHP et non une erreur jetée par Joomla; merci pour cette précision.

                      Envoyé par kmchen Voir le message
                      Mais il est bien dommage qu'il omette de spécifier le script et la ligne qui ont généré l'erreur et qui sont mis à disposition par PHP lors du déclenchement d'une exception
                      Mon dernier conseil vu que mes réponses sont très peu utiles : debug_backtrace (https://www.php.net/manual/fr/functi...-backtrace.php). Localise le fichier de Joomla où l'erreur "catchée" est écrite dans un fichier d'erreur et tu n'as qu'à afficher le stack.

                      Envoyé par kmchen Voir le message
                      Je pense que c'est la meilleure réponse qui convient à ce post
                      Autrement dit, mes interventions sont peu utiles; dont acte pour les prochaines fois.
                      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


                      • #12
                        Merci Christophe, tes réponses sont très utiles aussi. Je vais essayer debug_backtrace
                        Thierry CHEN
                        http://www.webologix.com création site internet
                        http://www.php-web-service.net Développeur WEB
                        http://www.joomla-development.eu Développement d'extensions Joomla

                        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