Tutoriel : votre premier hack COMET en PHP

Comme promis, mais avec un peu (beaucoup ?) de retard, voici un petit tutoriel pour COMET en PHP pour nos amis développeurs.
L’exemple est simplissime, il s’agit de faire tourner un compteur à partir d’instructions serveur… pas vraiment utile me direz-vous, mais bien pratique pour comprendre les bases de la chose.

Les bases sont ici :
1- lancer un script PHP dans une frame cachée (retour des vieilles combines…)
2- génération d’un bout de javascript
3 – exécution du javascript dans la frame visible

1- mon script PHP caché

<HTML>
<HEAD>
<META HTTP-EQUIV= »Content-Type » CONTENT= »text/html; charset=iso-8859-1″>
<meta http-equiv= »Pragma » content= »no-cache »>
</HEAD>
<BODY BGCOLOR= »blue »>
<?php
//on génère ici un javascript
/** début du javascript appelant une fonction de la frame visible */
$jsFunPre = « <script language=JavaScript >parent.push(‘ »;

/** fin du JavaScript */
$jsFunPost = « ‘)</script> »;
{
$i = 0;
while (true)
{
$i++;
// envoi d’une ligne de JavaScript au client
print($jsFunPre. »Page « .$i.$jsFunPost);
flush();
sleep(1);
}
}

?>

</BODY>
</HTML>

2- ma frame principale

<HTML>
<BODY BGCOLOR=black TEXT=white>
<H1>Attendez…</H1>

<div id= »initLinkDiv »>

<label>Texte poussé par le serveur :</label>
<textarea id= »leftTextZone » name= »leftTextZone » readonly>
</textarea>

<br>

</div>

</BODY>
</HTML>

3- la page contenant les 2 frames

<HTML>
<HEAD>
<META http-equiv= »Content-Type » content= »text/html; charset=iso-8859-1″>
<meta http-equiv= »Pragma » content= »no-cache »>

<script LANGUAGE= »JavaScript »>
var pageStart= »<HTML><HEAD></HEAD><BODY BGCOLOR=blue TEXT=white><H2>Server pushes: <P> »;
var pageEnd= »</H2></BODY></HTML> »;

// la fonction javascript appelée par la frame cachée
function push(content)
{
window.frames[‘displayFrame’].document.getElementById(« leftTextZone »).value = content;
}

</script>
</HEAD>

<FRAMESET BORDER=0 COLS= »*,*,0″>
<!– frame visible –>
<FRAME SRC= »frameToDisplay.html » NAME= »displayFrame » SCROLLING=yes>

</frame>

<!– frame cachée–>
<FRAME SRC= »hiddenFrame.php » NAME= »pushletFrame » BORDER=0 SCROLLING=no>
</frame>
</FRAMESET>

</HTML>

Normalement, si vous avez bien nommé vos fichiers ça devrait marcher… jusqu’au timeout de votre serveur (30 secondes par défaut) !
Je reste, bien entendu, à disposition pour répondre à vos questions…