Avant d'utiliser ob_end_clean () , vous devez vous assurer que le tampon de sortie est activé. PHP n'atteint pas la mise en mémoire tampon de sortie par défaut, donc si la fonction est appelée sans tamponner activée, le programme lancera un avertissement. Il est courant d'activer explicitement le tampon de sortie via ob_start () avant d'effectuer une opération de sortie.
<span><span><span class="hljs-title function_ invoke__">ob_start</span></span><span>();
</span><span><span class="hljs-comment">// Faire des opérations de sortie</span></span><span>
</span><span><span class="hljs-title function_ invoke__">ob_end_clean</span></span><span>(); </span><span><span class="hljs-comment">// Effacer et fermer le tampon</span></span><span>
</span></span>
Si vous n'appelez pas ob_start () , utilisez simplement ob_end_clean () , et le programme provoquera une erreur:
<span><span><span class="hljs-built_in">Warning</span></span><span>: ob_end_clean(): failed </span><span><span class="hljs-keyword">to</span></span><span> </span><span><span class="hljs-keyword">delete</span></span><span> buffer. </span><span><span class="hljs-keyword">No</span></span><span> buffer </span><span><span class="hljs-keyword">to</span></span><span> </span><span><span class="hljs-keyword">delete</span></span><span>.
</span></span>
Par conséquent, les développeurs doivent s'assurer que la mise en mémoire tampon de sortie est correctement démarrée avant d'appeler ob_end_clean () .
Une autre erreur facile consiste à essayer d'appeler ob_end_clean () sur un tampon sans aucune sortie. Si le tampon est vide, appeler la fonction n'aura aucun impact sur le programme, mais parfois, il entraînera des problèmes inutiles à déboguer. Pour vous assurer qu'il existe du contenu dans le tampon, vous pouvez d'abord utiliser ob_get_contents () pour vérifier le contenu du tampon, puis décider d'effectuer une opération de nettoyage.
<span><span><span class="hljs-title function_ invoke__">ob_start</span></span><span>();
</span><span><span class="hljs-comment">// Certaines opérations qui ne produisent pas de production</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">ob_get_contents</span></span><span>()) {
</span><span><span class="hljs-title function_ invoke__">ob_end_clean</span></span><span>();
}
</span></span>
Cela évite les messages d'avertissement inutiles et garantit que ob_end_clean () n'est exécuté que lorsqu'il y a du contenu dans le tampon.
Dans PHP, le tampon de sortie est géré dans une structure hiérarchique, et plusieurs appels ob_start () formeront une pile tampon. Lorsque vous utilisez ob_end_clean () , il efface et ferme le tampon supérieur. Si vous avez plusieurs tampons imbriqués, appeler ob_end_clean () n'affectera que le tampon le plus intérieur, tandis que d'autres tampons existent toujours.
Par conséquent, lorsque vous utilisez ob_end_clean () , assurez-vous de nettoyer le bon tampon. Si vous souhaitez fermer tous les tampons de toute la pile de tampons, vous pouvez utiliser ob_end_flush () pour nettoyer tous les tampons et sortir leur contenu, ou vérifier le nombre de couches du tampon via ob_get_level () .
<span><span><span class="hljs-comment">// Vérifiez le nombre de couches de tampon</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">ob_get_level</span></span><span>() > </span><span><span class="hljs-number">0</span></span><span>) {
</span><span><span class="hljs-title function_ invoke__">ob_end_clean</span></span><span>(); </span><span><span class="hljs-comment">// Nettoyez le tampon actuel</span></span><span>
}
</span></span>
ob_end_clean () est principalement utilisé pour effacer le tampon de sortie lorsque vous ne souhaitez pas envoyer de contenu au navigateur, en particulier avant de traiter les informations d'en-tête de réponse HTTP. L'utilisation d'un tampon peut empêcher la sortie inattendue du contenu après avoir envoyé un en-tête de réponse, ce qui entraîne une réponse incorrecte ou non modifiée. Cependant, dans certains scénarios, la tampon de sortie n'est pas requise (comme les petits scripts rapides), et l'utilisation d'OB_END_CLEAN () peut apporter une complexité inutile.
Par exemple, dans certaines demandes AJAX simples ou des réponses API, une utilisation excessive de la gestion des tampons peut augmenter la complexité du programme en cas d'exigence spécifique. Les développeurs débutants devraient décider de l'utilisation de tampons en fonction des besoins réels.
Le tampon de sortie occupera une certaine quantité de mémoire. Si le programme s'allume fréquemment sur le tampon, cela peut entraîner des déchets de mémoire. En particulier pour les grandes applications PHP, les opérations de tampon fréquentes peuvent avoir un certain impact sur les performances. Lorsque vous utilisez ob_end_clean () , assurez-vous qu'il n'y a pas de résidus de tampon inutiles pour éviter les fuites de mémoire.
Afin de mieux gérer la mémoire, les développeurs peuvent utiliser ob_get_level () pour déterminer s'il y a des tampons supplémentaires et les nettoyer dans le temps.
<span><span><span class="hljs-comment">// Vérifiez les tampons supplémentaires avant de les utiliser</span></span><span>
</span><span><span class="hljs-keyword">while</span></span><span> (</span><span><span class="hljs-title function_ invoke__">ob_get_level</span></span><span>() > </span><span><span class="hljs-number">1</span></span><span>) {
</span><span><span class="hljs-title function_ invoke__">ob_end_clean</span></span><span>(); </span><span><span class="hljs-comment">// Nettoyez tous les tampons indésirables</span></span><span>
}
</span></span>
Ob_end_clean () et ob_end_flush () sont utilisés pour fermer les tampons, mais ils se comportent différemment. ob_end_clean () rejette le contenu dans le tampon, tandis que ob_end_flush () sortit le contenu du tampon au navigateur ou client et ferme le tampon.
Si vous souhaitez sortir le contenu du tampon et l'envoyer au navigateur, vous pouvez utiliser ob_end_flush () , et si vous souhaitez simplement effacer le tampon sans le sortir, utilisez ob_end_clean () . Comprendre leurs différences est très important pour l'utilisation correcte de la mise en mémoire tampon de sortie.