Problème avec file_get_contents pour lire libraries/src/Version.php

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

  • [RÉGLÉ] Problème avec file_get_contents pour lire libraries/src/Version.php

    Bonjour à tous,

    Je cherche à récupérer (dans un fichier externe mais placé dans le dossier du site, les infos de version de Joomla! présentes dans le fichier "libraries/src/Version.php".
    Pour ça, je fais un "file_get_contents" pour en récupérer le contenu sous forme de chaîne où j'irai ensuite chercher les clés et valeurs avec un preg_match_all.
    $vFile4 = file_get_contents($f4, FALSE, NULL, 0);
    Comme je n'arrive à rien, je fais afficher ce que j'ai récupéré dans ma chaîne $vFile4, et je m'aperçois que le contenu commence par :
    Joomla! is Free Software released under the GNU General Public License.
    qu'on ne trouve pas en début de fichier mais dans la ligne définissant 'const URL' ligne 146, et qui continue par
    '; /** * Magic getter providing access to constants previously defined as class member vars.
    qui n'apparaît dans le fichier qu'à la ligne 148, ce qui veut dire que les 145 premières lignes, celles où il y a, entre autres, les "const" que je veux récupérer, ne sont pas dans la chaîne récupérée par file_get_contents.
    Si je définis une "max length" pour essayer de forcer la lecture au début, ce que j'ai déjà fait avec offset à 0, je récupère une chaîne vide.

    Qu'est-ce qui peut expliquer ce comportement ? Y a-t-il une méthode simple pour lire ce fichier et récupérer les MAJOR_VERSION, MINOR_VERSION et autres constantes utiles ?
    Utiliser ce fichier me semblait plus simple que décoder le manifeste joomla.xml, mais j'ai l'impression de m'être trompé...

    Merci par avance de vos conseils !
    Robert
    "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
    Envoyé par RobertG Voir le message
    Comme je n'arrive à rien, je fais afficher ce que j'ai récupéré dans ma chaîne $vFile4, et je m'aperçois que le contenu ...
    Comment as-tu fait l'affichage ? Un simple "echo" ? (n'oublie pas que c'est du code PHP qui se trouve dans ce fichier)

    Tu devrais faire un "echo '<pre>' . print_r($vFile4, true) . '</pre>';" pour voir le contenu réel; non interprété.

    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, mais je n'y arrive pas. Ni echo, ni print_r de me renvoie quoi que ce soit.
      En fait, j'essayais de modifier ton fichier jamss.php qui ne fonctionne plus depuis que le fichier version.php a changé d'emplacement, de contenu et de libellé pour Version.php
      Pour le moment, la seule solution qui fonctionne est le décodage du fichier manifeste joomla.xml
      "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
        Jamss n'est pas mon fichier ;-)
        Voici la source https://github.com/btoplak/Joomla-An...Script--JAMSS-
        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
          Oui, mais il y a quand même ton copyright dans celui d'aeSecure. Je suis donc parti de l'idée que tu l'avais personnalisé, ce qui est vrai.
          Ceci dit, la version originale ne reconnaîtra pas plus les versions récentes dans la mesure où les fichiers cherchés pour connaître la version de Joomla! n'existent plus depuis je ne sais plus quelle version 3.
          Quant à la recherche de la version, elle se fait, sur les anciennes de Joomla!, dans des fichiers "version.php" où les infos semblent bien récupérées.
          Il faudrait que je me remonte une version 3.0 pour vérifier.

          Dans ce nouveau fichier, les variables sont remplacées par des constantes : public $RELEASE devient const RELEASE, par exemple.

          Ce qui est bizarre, c'est que dans ce fichier dont je ne vois pas l'entête dans $vFile4 (quand je mets $joomla['version_text'] = $vFile4 et que jamss m'affiche la page après traitement des fichiers) le "preg_match_all" est capable de me retrouver "const DEV_LEVEL" mais pas "const RELEASE" ou "const MAJOR_VERSION". Peut-être parce qu'il y a trois fois "major_version" et cinq fois "release" dans le fichier et que je ne sais pas récupérer comme il faut ces éléments de tableau ?

          PS : j'ai réussi à utiliser finalement echo '<pre>' . print_r($vFile4, true) . '</pre>'; qui me montre toujours le contenu du fichier à partir de la ligne 146 (et toutes les fonctions au-dessous), et je confirme que certaines constantes sont bien récupérées, mais pas RELEASE, MAJOR_VERSION ni MINOR_VERSION
          Les arrays dont je devrais voir le contenu (selon le manuel PHP)avec un "print_r ($MINOR");" après avoir récupéré preg_match_all('|\MINOR_VERSION\s*=.*\'(.*)\'|iS', $vFile4,$MINOR);
          me donnent
          Array ( [0] => Array ( ) [1] => Array ( ) )
          alors que pour $DEV_STATUS, je récupère
          Array ( [0] => Array ( [0] => DEV_LEVEL = '3-dev' ) [1] => Array ( [0] => 3-dev ) )
          Dernière édition par RobertG à 28/01/2019, 11h36
          "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
            Je viens de tester sur la version 4.0 de développement, où ce fichier Version.php n'a plus certaines chaînes obsolètes comme RELEASE.

            Aucune des "const" MAJOR_VERSION, MINOR_VERSION, PATCH_VERSION n'est récupérée par preg_match_all, seulement EXTRA_VERSION et DEV_STATUS, et partiel pour EXTRA:
            Array ( [0] => Array ( [0] => XTRA_VERSION = 'alpha7-dev' ) [1] => Array ( [0] => alpha7-dev ) )
            Il manque le "E" de "EXTRA_VERSION" alors que pour DEV_STATUS l'info est bonne
            Array ( [0] => Array ( [0] => DEV_STATUS = 'Development' ) [1] => Array ( [0] => Development ) )
            On dirait bien que contrairement à ce qui devait se passer pour les versions avant la 3.8.0, ce fichier ne soit pas lu depuis le début...

            Complément : en version 3.5.0, 'public $RELEASE' devient 'const RELEASE' par exemple et jamss.php ne sait plus reconnaître la version
            E version 3.7.5 où on a toujours l'ancien fichier version.php, même problème qu'avec les versions actuelles, on ne récupère pas "RELEASE" qui est dan sle fichier avant "DEV_LEVEL"
            Dernière édition par RobertG à 28/01/2019, 16h58
            "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


            • #7
              Désolé mais je ne comprends pas trop... C'est pour porter l'outil jamss sur J4 ? As-tu vérifié avec l'auteur sur github.com ?
              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


              • #8
                Rien sur Github depuis 5 ans.
                C'est pour tenter de mettre à jour ta version incluse dans aeSecure.

                D'une manière ou d'une autre, ce que je n'arrive pas à comprendre c'est que certaines parties du fichier semblent totalement ignorées, comme si file_get_contents qui savait lire les anciens "version.php" (avant la 3.7.5 que j'ai testée tout à l'heure) ne sait plus lire le début du fichier, et ne renvoie donc pas les valeurs correspondantes.
                "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


                • #9
                  Note qu'aeSecure Quickscan est je pense meilleur et je l'ai mis à jour fin 2018
                  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


                  • #10
                    Je crois que la dernière fois que je l'ai testé il m'a dit ne pas trouver les fichiers de la version de Joomla!, mais peut-être n'avais-je pas utilisé ta dernière version.
                    Je viens donc de tenter avec la toute dernière, et j'ai ce message (sur un site en local)
                    Désolé, les signatures des fichiers pour la version 3.9.1 de Joomla n'ont pas été trouvées; le scan du site sera donc bien plus long.
                    Ceci m'amène aussi à deux questions :
                    - faut-il supprimer Jamss du menu aeSecure ?
                    - et toujours pourquoi on ne récupère pas le début du fichier, dans mes tests de Jamss ?
                    "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
                      Il semble que ce soit le "pattern" qui soit en cause dans jamss, car si je prends exemple sur ce que tu utilises avec seulement preg_match au lieu de preg_match_all dans aesecure_quickscan, je récupère bien RELEASE dans une version 3.7.5
                      Il me rester à tester ta méthode avec les versions plus récentes.
                      "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


                      • #12
                        Envoyé par RobertG Voir le message
                        Je crois que la dernière fois que je l'ai testé il m'a dit ne pas trouver les fichiers de la version de Joomla!, mais peut-être n'avais-je pas utilisé ta dernière version.
                        Je viens donc de tenter avec la toute dernière, et j'ai ce message (sur un site en local)


                        Ceci m'amène aussi à deux questions :
                        - faut-il supprimer Jamss du menu aeSecure ?
                        - et toujours pourquoi on ne récupère pas le début du fichier, dans mes tests de Jamss ?
                        À chaque sortie d'un joomla (ou autre CMS) je dois générer un fichier de signatures et c'est vrai que je ne suis pas cela avec une extrême rigueur.

                        Pour jamss oui tu pourrais l'ignorer (ou le supprimer). D'ailleurs sur certains hébergeurs je conseillais de le supprimer car ces hébergeurs considéraient jamss comme dangereux (faux positifs bien sûr). Aesecure Quickscan ne sera plus jamais considéré comme faux positifs car il ne contient plus de patterns puisqu'ils les téléchargent au fur et à mesure au format json.

                        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


                        • #13
                          Merci Christophe !
                          Je viens de tester avec le code que tu utilises dans aesecure_quickscan (modifié dans jamss) et les valeurs de remplacement de RELEASE (MAJOR_ à EXTRA_VERSION), qui apparaissent avant sa définition dans Version.php des 3.9, ne sont pas récupérées, et ne passent pas en version 4.0 dev non plus.
                          C'est ça que j'aimerais comprendre : pourquoi le début du fichier semble ignoré.
                          "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


                          • #14
                            Bonjour !

                            Je viens de faire un test en modifiant la dernière version de aesecure_quickscan afin d'utiliser MAJOR_VERSION, MINOR_VERSION et PATCH_VERSION sur une 3.9.3-dev à la place des constantes RELEASE et DEV_LEVEL devenues obsolètes.
                            J'ai donc changé la liste des chaînes à trouver ($arr) et la construction des chaînes renvoyant la version :
                            $Version = $arr['MAJOR_VERSION'] . '.' . $arr['MINOR_VERSION'] . '.' . $arr['PATCH_VERSION'] . '.' . $arr['DEV_STATUS'];
                            //$FullVersion = $arr['RELEASE'] . '.' . $arr['DEV_LEVEL'] . ' (' . $arr['DEV_STATUS'] . ') ' . '(' . $arr['RELDATE'] . ' ' . $arr['RELTIME'] . ' ' . $arr['RELTZ'] . ')';
                            $FullVersion = $Version . '(' . $arr['RELDATE'] . ' ' . $arr['RELTIME'] . ' ' . $arr['RELTZ'] . ')';
                            et print_r ($Fullversion); me renvoie
                            0.0.0.Development(15-January-2019 0 GMT)
                            aesecure_quickscan n'arrive pas non plus à récupérer ce qui est présent avant DEV_STATUS, bien qu'un "print_r ($content)" montre bien (dans le code-source de la page affichée) le contenu du fichier Version.php depuis sa première ligne.
                            La question reste donc de comprendre pourquoi ces trois lignes ne sont pas récupérées.
                            "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


                            • #15
                              Salut

                              Que je comprenne bien : le fichier de version a changé sous J3.9.3-dev et le pattern que j'utilise dans QuickScan devrait être adapté pour en tenir compte. Correct ? Si oui, je tâcherais d'y jeter un oeil sous peu.

                              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

                              Annonce

                              Réduire
                              Aucune annonce pour le moment.

                              Partenaire de l'association

                              Réduire

                              Hébergeur Web PlanetHoster
                              Travaille ...
                              X