2017-05-22 1 views
1

d'émissionpoignée d'erreur Whoops PHP tampon clair

Dans les scripts de procédure de gestionnaire de contenu de la page Jolie du PHP sera mélangé avec une partie du contenu à partir de la sortie du tampon d'applications. Les guillemets peuvent apparaître brouillés ou sortis à l'intérieur d'une balise html cachée.

Question

Comment effacer la mémoire tampon précédent avant des tampons de gestionnaire Whoops?

Répondre

0

Le travailleur de solution suivante pour moi:

le plus tôt de votre script et peut-être que dans un mode debug ou DÉVELOPPEUR que je ne vous dois faire:

if(DEVELOPER_DEBUG === true) 
    ob_start(); 

Ensuite, où vous déclarez que Whoops j'ai fait:

if(DEVELOPER_DEBUG === true) 
{ 
    $_whoops = new \Whoops\Run(); 

    $_whoops->pushHandler(function(){ 
     ob_clean(); 
    }); 

    $_handler = new \Whoops\Handler\PrettyPageHandler(); 
    $_whoops->pushHandler($_handler); 
    $_whoops->register(); 
} 

Cela a fonctionné parfaitement dans mon utilisation c ase dans les scripts procéduraux pour effacer tout tampon généré avant que Whoops ne démarre sa propre sortie.

Pourquoi ça marche

ob_start() peut être appelé plusieurs fois, le tampon de rinçage ou doit clairement fonction à appeler le même nombre de fois que le démarrage a été appelé dans l'ordre. En faisant que votre application démarre son propre tampon, cela en fait une ressource qui peut être effacée, Whoops lance toujours aussi son propre tampon, donc en enregistrant un gestionnaire pour effacer le premier tampon (votre application) puis sur l'événement de une erreur, Whoops peut effacer ce tampon précédent.

tampon de contrôle

Par exemple, chaque appel de ob_start un tampon supplémentaire est créé.

Si vous appelez ob_start 3 fois, vous devez appeler ob_flush 3 fois afin de sortir tout le contenu mis en mémoire tampon.

Si vous l'appelez une fois, vous ne pourrez effacer ou vider le contenu généré avant la déclaration du prochain ob_start.

Peut être adaptatif pour la POO.