2010-09-04 5 views
6

Problèmes de bufferisation de sortie. Principalement, j'essaie d'exécuter la mise en mémoire tampon de sortie avec le rappel ob_gzhandler, mais il continue à me dire qu'il utilise un type de compression non pris en charge. Tout est permis, et je crois que le problème est que l'exécution ob_get_level() au début de mon script produit un niveau de 1. php.ini a mon output_buffering réglé sur 4096.ob_get_level() commence au niveau 1

Si je lance quelque chose comme:

while(ob_get_level() > 0){ 
    ob_end_clean(); 
} 

Ensuite, je peux exécuter ob_start() avec succès avec le rappel ob_gzhandler. Mais je me demande si ça devrait être un problème. Au cours de mon script, je fais des appels à ob_clean() à différents moments car j'évite d'empiler trop de tampons car j'ai lu cela peut augmenter les performances. Je ne suis pas sûr de ce que je devrais faire ici.

Cheers.

Répondre

7

La mise en mémoire tampon de sortie est activée par défaut (voir the docs) - cela signifie que chaque script PHP commence par ob_start().

Si vous souhaitez désactiver l'OB par défaut pour tous les scripts PHP, dans votre fichier php.ini, définissez output_buffering = Off.

Si vous souhaitez uniquement désactiver l'OB par défaut pour ce script spécifique, utilisez la boucle while - c'est tout à fait correct.

Comme pour le ob_clean - êtes-vous sûr de vouloir supprimer la sortie qui est dans votre tampon? OMI ce n'est pas vraiment nécessaire, sauf si vous voyez des charges de pages lentes significatives. Ne vous inquiétez pas d'optimiser cela (du moins pas maintenant).

+0

Oui, je crois que oui. Il est défini comme: output_buffering = 4096 (que j'ai dit ci-dessus). Qu'est-ce que je veux dire, est-ce que je devrais laisser cela tel quel, et simplement lancer la boucle que j'ai ci-dessus afin que je puisse démarrer la mise en tampon de sortie ob_gzhandler? –

+0

@Jason Lewis: C'est à vous de décider. Je laisserais probablement l'OB par défaut pour tous les scripts, et le terminerais avec la boucle 'while' dans les cas où je voulais utiliser le mien. – Piskvor

+0

J'étais censé dire que j'utilise ob_get_clean() dans quelques endroits, pour stocker la sortie dans quelques variables et finalement il est vidé. Est-ce un bon moyen de le faire, ou devrais-je commencer un nouveau tampon pour chaque endroit où je veux capturer la sortie et utiliser plutôt ob_get_flush()? –

Questions connexes