[résolu]Gzip et erreur d'encodage de contenu avec certains plugin

26 avril modifié dans Entraide

Bonjour,

je viens de découvrir qu'en activant la compression gzip dans PluXml, que certain plugins provoquaient une erreur d'encodage de contenu?

Je ne comprend pas pourquoi certains, et pas d'autres, fonctionnent .
J'ai vérifier que tout était bien encode en UTF-8 (tout est okay et puis ce n'est pas ce que le message d'erreur me dit)

Les plugins concernés semblent être uniquement des plugins injectant ou modifiant le contenu d'une page avant son affichage. Un télescopage ? comment peut on éviter cela ?

plugins concernés : HookMyTheme, kzskinSelect, .... par exemple

plxMysearch n'est par contre, pas concerné

config : PluXml v5.8.7/5.8.8
PHP Version 7.2.19

Je suis face à un mystère où je ne trouve pas le fil conducteur pour trouver ou comprendre le comment du pourquoi.

♣♣♣♣ <°(((((-{ ~ Mon site avec PluXml: https://re7net.com | Mes plugins : https://github.com/gcyrillus PluXml 5.8.7 sur free ? oui c'est possible : http://gcyrillus.free.fr/new }-))))°> ♣♣♣♣

Mots clés:

Réponses

  • Bon en attendant de comprendre comment tout cela fonctionne et s'imbrique, je fait un reset sauvage de la config sur le hook indexBegin


    // désactive la compression gzip si activée public function IndexBegin() { echo self::BEGIN_CODE; ?> $plxMotor->aConf['gzip'] ='0'; <?php echo self::END_CODE; }

    ♣♣♣♣ <°(((((-{ ~ Mon site avec PluXml: https://re7net.com | Mes plugins : https://github.com/gcyrillus PluXml 5.8.7 sur free ? oui c'est possible : http://gcyrillus.free.fr/new }-))))°> ♣♣♣♣

  • salut @gcyrillus-nomade

    est-ce que la version de tes plugins est la dernière en date ? Et est-ce que cette version est confirmé compatible avec la dernière version de PluXml ? Le code PHP utilisé est-il actualisé ?

  • 19 avril modifié

    Bonjour @kowalsky , merci de ton intêret.

    voici quelques infos :
    plugin: dernières versions
    serveur : apache httpd-2.4.35-win64-VC15
    php 7.2.19 edit version 7.3.2 et 8.1.5
    PluXml 5.8.8 et 5.8.7
    Navigateur : FF et Chrome up to date.

    version confirmé compatible ?

    Je n'ai pas connaissance d'un outil ou d'une checklist ou autre moyen permettant de vérifier cela.

    Le code PhP est-il actualisé.

    Je ne suis pas développeur, j'imagine que j'utilise allégrement des fonction qui sont soit obsolète soit pas les plus efficaces.

    par exemple un plugin avec un code relativement cours qui pose probleme

    cliquez pour voir code de hookMyTheme
    <?php
      class hookMyTheme extends plxPlugin {  
    
        const HOOKS = array(
                'IndexEnd',
                'ThemeTag',
                'ThemeEndBody',
                'ThemeEndHead',
            );  
    
        public function __construct($default_lang) {
    
    
            # appel du constructeur de la classe plxPlugin (obligatoire)
            parent::__construct($default_lang);
    
            # Ajoute des hooks
                foreach(self::HOOKS as $hook) {
                    $this->addHook($hook, $hook);
                }
    
    
            # droits pour accèder à la page config.php du plugin
            $this->setConfigProfil(PROFIL_ADMIN);   
    
            # limite l'accès à l'écran d'administration du plugin
                    $this->setAdminProfil(PROFIL_ADMIN);
    
            # initialisation variables
            $this->aParams['tag1'           ]['value']= $this->getParam('tag1'          )   =='' ? '' : $this->getParam('tag1'          );
            $this->aParams['tag2'           ]['value']= $this->getParam('tag2'          )   =='' ? '' : $this->getParam('tag2'          );
            $this->aParams['ThemeEndBody'   ]['value']= $this->getParam('ThemeEndBody'  )   =='' ? '' : $this->getParam('ThemeEndBody'  );
            $this->aParams['ThemeEndHead'   ]['value']= $this->getParam('ThemeEndHead'  )   =='' ? '' : $this->getParam('ThemeEndHead'  );      
    
        }
            function str_replace_limit($haystack, $needle, $replace, $limit, $start_pos = 0) {
                if ($limit <= 0) {
                        return $haystack;
                    } else {
                        $pos = strpos($haystack,$needle,$start_pos);
                        if ($pos !== false) {
                            $newstring = substr_replace($haystack, $replace, $pos, strlen($needle));
                            return str_replace_limit($newstring, $needle, $replace, $limit-1, $pos+strlen($replace));
                        } else {
                        return $haystack;
                        }
                    }
            }
    
    
        #fonctions des hooks
    
            #desc hook function
            public function IndexEnd() {
                $prependToTag =$this->aParams['tag1']['value']; 
                echo '<?php ';?>
                    ob_start();
                    eval($plxMotor->plxPlugins->callHook('ThemeTag')); # Hook Plugins  
                    $output = str_replace('<?php echo $prependToTag; ?>', ob_get_clean(), $output);
             ?>
              <?php 
            }
    
            #desc hook function
            public function ThemeEndBody() {
                echo    $this->aParams['ThemeEndBody']['value'];    
    
            }   
    
            #desc hook function
            public function ThemeEndHead() {
                echo    $this->aParams['ThemeEndHead']['value'];    
    
            }
    
    
            #desc hook function
            public function ThemeTag() {
                echo    $this->aParams['tag1']['value'];    
                echo    $this->aParams['tag2']['value'];                
            }
    
    
    
    }
    ?>
    

    Sous hebergement linux et php 7.3.26 , pas de soucis.
    Finalement , c'est peut-être un simple bug du à la version de php que je fait tourné. J'envisage de mettre un php en version 8 , je verrai d'ici là si le bug perdure en local .

    Maintenant si je me sert d'une version bugué, je vais surement avoir de drôle de surprise en passant sur une version sans bug.

    En relançant en local avec 2 autres version de PHP, idem, même message d'erreur .

    Erreur d’encodage de contenu

    La page que vous essayez de voir ne peut être affichée car elle utilise un type de compression invalide ou non pris en charge.

    ♣♣♣♣ <°(((((-{ ~ Mon site avec PluXml: https://re7net.com | Mes plugins : https://github.com/gcyrillus PluXml 5.8.7 sur free ? oui c'est possible : http://gcyrillus.free.fr/new }-))))°> ♣♣♣♣

  • Salut @gcyrillus-nomade

    désolé, il va falloir attendre que les spécialistes du codage passent dans le coin pour regarder cela plus en détail.

  • 26 avril modifié

    @kowalsky

    merci,
    de mon coté je n'ai toujours pas trouvé le fil conducteur,

    J'ai modifie le plugin HookMyTheme (le plus petit et simple qui provoque ce bug) en évinçant le ob_start dans la fonction indexEnd() ainsi qu'en enlevant le hook/function àjoutée ThemeTag().

    Reste donc des echo $this->aParams[X']et unstr_replace()`.

    ce qui donne un plugin toujours fonctionnel réduis à et toujours incoppatible avec l'option GZIP activée.:

    <?php
      class hookMyTheme extends plxPlugin {  
    
        const HOOKS = array(
                'IndexEnd',
                'ThemeEndBody',
                'ThemeEndHead',
            );  
    
        public function __construct($default_lang) {
            # appel du constructeur de la classe plxPlugin (obligatoire)
            parent::__construct($default_lang);
            # Ajoute des hooks
                foreach(self::HOOKS as $hook) {
                    $this->addHook($hook, $hook);
                }   
            # droits pour accèder à la page config.php du plugin
            $this->setConfigProfil(PROFIL_ADMIN);   
            # limite l'accès à l'écran d'administration du plugin
            $this->setAdminProfil(PROFIL_ADMIN);
        }
        #hooks
            public function IndexEnd() {
                $prependToTag = $this->aParams['tag1']['value'];        
                echo '<?php ';?>
                    $output = str_replace('<?php echo $prependToTag; ?>', '<?php echo $this->aParams['tag2']['value'] ?>'  , $output);      
             ?>
              <?php 
            }
            public function ThemeEndBody() {
                echo    $this->aParams['ThemeEndBody']['value'];            
            }   
            public function ThemeEndHead() {
                echo    $this->aParams['ThemeEndHead']['value'];            
            }
    }
    ?>
    

    indexEnd() semble être le hook posant soucis , il est aussi commun au plugin kzskinselect .
    Je laisse mijoté jusqu’à ce que je retrouve la raison logique, si jamais.

    Cdt

    ♣♣♣♣ <°(((((-{ ~ Mon site avec PluXml: https://re7net.com | Mes plugins : https://github.com/gcyrillus PluXml 5.8.7 sur free ? oui c'est possible : http://gcyrillus.free.fr/new }-))))°> ♣♣♣♣

  • 26 avril modifié

    ...

    En attendant de trouver (ou qu'un gentil dev me donne ;) ) une raison valable et une solution, je retourne à ma première résolution en désactivant cette f@chue option de force sans rien dire:

            // désactive de force la compression gzip si activée pour une compatibilité des plugins usant du hook indexEnd() ou hook perso similaire dans les templates
            public function  IndexBegin() {
                echo self::BEGIN_CODE;
    ?>
            $plxMotor->aConf['gzip'] ='0';
    <?php
                echo self::END_CODE;            
            }
    

    ou selon votre structure de plugin si les constantes BEGIN_CODE et END_CODE ne sont pas configurées

            // désactive de force la compression gzip si activée pour une compatibilité des plugins usant du hook indexEnd() ou hook perso similaire dans les templates
            public function  IndexBegin() {
                echo '<?php ';
    ?>
            $plxMotor->aConf['gzip'] ='0';
                ?>
    <?php           
            }
    

    ♣♣♣♣ <°(((((-{ ~ Mon site avec PluXml: https://re7net.com | Mes plugins : https://github.com/gcyrillus PluXml 5.8.7 sur free ? oui c'est possible : http://gcyrillus.free.fr/new }-))))°> ♣♣♣♣

Connectez-vous ou Inscrivez-vous pour répondre.