W3docs

Fonction PHP ob_get_length() : tout ce que vous devez savoir

Découvrez comment utiliser ob_get_length() en PHP pour obtenir la longueur du tampon de sortie actif, avec des exemples pratiques et des conseils.

ob_get_length() renvoie le nombre d'octets actuellement présents dans le tampon de sortie actif de PHP — le contenu capturé par ob_start() mais pas encore envoyé au navigateur. Cette fonction est utile lorsque vous souhaitez mesurer la sortie générée avant de décider quoi en faire : imposer une limite de taille, construire un en-tête Content-Length, journaliser la taille d'une charge utile, ou simplement vérifier si quelque chose a déjà été écrit.

Cette page couvre la signature de la fonction, sa valeur de retour, les pièges liés aux tampons imbriqués, ainsi que quelques modèles pratiques.

Syntaxe

ob_get_length(): int|false

La fonction ne prend aucun argument. Elle retourne :

  • un entier — la longueur en octets des données dans le tampon de sortie actif, ou
  • false — si la mise en tampon de sortie n'est pas active (aucun tampon n'a été démarré, ou tous ont déjà été fermés).

Comme elle peut retourner false, utilisez toujours === plutôt qu'une comparaison souple si vous devez distinguer « pas de tampon » d'un tampon de longueur 0.

Un exemple de base

<?php

ob_start();
echo "This will be buffered";   // 21 bytes
$length = ob_get_length();
ob_end_clean();                 // discard the buffer

echo "Buffered length was: $length"; // Buffered length was: 21

Ici, ob_start() démarre la mise en tampon, donc echo écrit dans le tampon au lieu d'envoyer au navigateur. ob_get_length() retourne 21 (la longueur en octets de la chaîne). ob_end_clean() supprime ensuite le contenu mis en tampon — seul le dernier echo atteint la sortie.

Notez que la longueur est mesurée en octets, et non en caractères. Une chaîne UTF-8 multi-octets indiquera plus d'octets qu'elle ne contient de caractères visibles.

Détecter si un tampon est actif

Lorsqu'aucune mise en tampon n'est en cours, la fonction retourne false :

<?php

var_dump(ob_get_length()); // bool(false)

ob_start();
echo "hi";
var_dump(ob_get_length()); // int(2)
ob_end_clean();

Cela fait de ob_get_length() un moyen rapide de tester « quelque chose est-il actuellement mis en tampon ? » — étroitement lié à ob_get_level(), qui indique combien de tampons imbriqués sont ouverts.

Tampons imbriqués : seul le tampon actif est mesuré

Les tampons PHP peuvent être empilés. ob_get_length() indique toujours la longueur du tampon le plus haut (le plus interne, actuellement actif) — jamais le total combiné :

<?php

ob_start();
echo "outer";              // 5 bytes in the outer buffer

ob_start();
echo "inner text";         // 10 bytes in the inner buffer
$inner = ob_get_length();  // measures the active (inner) buffer
ob_end_clean();            // discard inner

$outer = ob_get_length();  // outer is active again
ob_end_clean();            // discard outer

echo "inner=$inner outer=$outer"; // inner=10 outer=5

Si vous avez besoin d'une vue d'ensemble complète, inspectez chaque niveau avec ob_get_level() et retirez les tampons un par un.

Un modèle pratique : ignorer la sortie vide

Un usage courant consiste à éviter d'émettre quoi que ce soit (et la surcharge du travail associé) lorsqu'un fragment mis en tampon s'avère vide :

<?php

ob_start();
// ... template / partial that may or may not produce output ...

if (ob_get_length() > 0) {
    // there is real content — send it
    ob_end_flush();
} else {
    // nothing was generated — drop the empty buffer
    ob_end_clean();
}

Pour lire les octets mis en tampon eux-mêmes plutôt que leur longueur, utilisez ob_get_contents() ; pour récupérer le contenu et fermer le tampon en un seul appel, utilisez ob_get_clean().

Conclusion

ob_get_length() indique la longueur en octets du tampon de sortie actif de PHP, ou false lorsqu'aucun tampon n'est ouvert. Retenez trois points : elle compte les octets, elle mesure uniquement le tampon actif dans une pile imbriquée, et un retour false signifie que la mise en tampon est désactivée. Combinée avec le reste des fonctions de contrôle de sortieob_get_contents(), ob_get_clean() et ob_get_level() — elle vous permet de mesurer et de gérer précisément la sortie générée avant qu'elle n'atteigne le navigateur.

Pratique

Pratique
Quelle est la fonction de ob_get_length() en PHP ?
Quelle est la fonction de ob_get_length() en PHP ?
Was this page helpful?