J'ai quelques questions conceptuelles (toutes reliées, je pense) concernant le script suivant, aux commentaires. Le script fonctionne bien.PHP buffer pourquoi?
<?PHP
ob_start();
// Create string to overflow browser buffer ...?
$buffer = str_repeat(" ", 4096);
// Indicate new header/html content ...?
$buffer .= "\r\n<span></span>\r\n";
for ($i=0; $i<5; $i++) {
echo $buffer.$i;
ob_flush();
flush();
sleep(1);
}
ob_end_flush();
?>
D'abord, pourquoi dois-je envoyer le \r\n<tag>\r\n
au navigateur? Je suppose que cela a quelque chose à voir avec les en-têtes. Deuxièmement, pourquoi ai-je besoin de HTML au milieu? Troisièmement, il y a beaucoup d'exemples qui utilisent 256 octets au lieu de 4096. Cependant, le script ne fonctionne pas si j'utilise 256. Ces exemples sont-ils obsolètes, et ce nombre changera-t-il dans le futur?
// EDIT SOURCE LIENS CONCERNANT
Ce code a été recueillie principalement de la commentary in php.net sleep()
function et the solution to this SO question. Aucun des deux ne mentionne pourquoi inclure \r\n
.
// EDIT CONCERNANT TÊTES
si je ne fais pas \r\n
, une balise HTML, et un second ensemble de \r\n
, le script ne sera pas exécuter correctement dans Chrome ou Safari (il dumps simplement toutes les valeurs à une fois que).
En outre, si cela est appelé avant un session_start()
, il génère une erreur: "Impossible d'envoyer le limiteur de cache de session - en-têtes déjà envoyés".
Il serait utile de savoir quel est le but du script/résultat attendu. – netcoder
4096 octets est le paramètre de mise en tampon de sortie 'php.ini' par défaut. '\ r \ n' est juste un retour à l'environnement Windows typique. – Phil
D'où avez-vous obtenu ce code? qu'est-ce que c'est censé faire? – cambraca