Si vous avez déjà un peu touché au développement de plugins pour WordPress, il vous est peut-être arrivé d’avoir un warning lors de l’activation de ceux-ci. Ceci est du à l’envoie de caractères sur la sortie standard avant d’avoir déclaré le header. C’est assez gênant et pas très professionnel de diffuser un plugin comme ça.
D’où ça vient ?
Généralement, il s’agit juste d’un (de quelques) warning(s) généré(s) pendant l’activation du plugin. Par exemple, si vous avez mis WordPress en mode debug (WP_DEBUG à true) ou si vous utilisez xDebug.
Comment on s’en sort ?
On sort du mode debug de WordPress, on desactive xDebug, et on joue avec les flags de error_reporting dans le php.ini pour cacher les warnings. Ok, je déconne ! On pourrait peut-être debugger nos warnings. Par contre, on aimerait bien avoir accès à ces warnings pour debugger un peu plus efficacement qu’en aveugle.
Comment accéder à ces caractères ?
On va pouvoir jouer avec la bufferisation de sortie. Qu’est ce que c’est que ce truc ? Ça permet juste de mettre dans un buffer les caractères qui étaient destinés à la sortie standard. On va utiliser deux fonctions php ob_start et ob_get_contents. La première sert à commencer la bufferisation de la sortie, et avec la seconde on récupère le contenu du buffer.
Ça donnerait donc un truc comme ça :
register_activation_hook(__FILE__,'monplugin_activate'); function monplugin_activate(){ ob_start(); //Ici votre code pour l'activation du plugin $contents = ob_get_contents(); }
Pour ce qui est de récupérer la variable $contents, je vous laisse choisir : mettre un point d’arrêt et debugger avec votre outil préféré, un petit exit ou encore error_log.
Pour plus d’infos sur cette histoire de bufferisation de sortie, allez faire un tour sur l’article du site du zero : La tamporisation de sortie en PHP.
Amusez vous bien !