Bonjour tout le monde.
Voici un code php simple :
Code :
- <?php
- set_time_limit(3600 * 24);
- jallouedesressources();
- while(true) {
- echo "wello php world!\n";
- }
- jedesallouedesressources();
- ?>
|
Un client affichant une page contenant ce code va se voir retourner du "hello php world" pendant 24h...
Maintenant que ce passe t il si le client se déconnecte avant ?
Ce que je souhaiterai c'est que lorsque le client se déconnecte, je sorte de la boucle et j'appelle la fonction jedesallouedesressources();.
Pour cela j'ai trouvé la fonction php : connection_status() qui retourne 1 si le client se déconnecte.
J'adapte mon code comme ceci :
Code :
- <?php
- set_time_limit(3600 * 24);
- jallouedesressources();
- while(true) {
- echo "wello php world!\n";
- if (connection_status() !== 0) break;
- }
- jedesallouedesressources();
- ?>
|
Et ca marche Sauf... Quand la connexion se coupe (donc pas de TCP FIN) et part en timeout...
Mon idée était donc de remplacer echo "hello php world" par :
Code :
- $stdout = fopen("php://output", "wb" );
- (...)
- $sw = array($stdout);
- $sr = $se = NULL;
- $r = stream_select($sr, $sw, $se, 3); // 3sec avant timeout
- if ($r === 0) { // timeout en écriture sur l'output donc buffer plein donc connexion tcp en timeout
- break;
- }
- fwrite($stdout, "hello php world!" );
|
Sauf que PHP me renvoie une erreur : cannot represent a stream of type Output as a select()able descriptor
Et là je seche....