stream_select

(PHP 4 >= 4.3.0, PHP 5)

stream_select -- Retourne l'équivalent de l'appel système select() sur un tableau de flux avec un délai d'expiration spécifié par tv_sec et tv_usec

Description

int stream_select ( array &read, array &write, array &except, int tv_sec [, int tv_usec] )

stream_select() accepte un tableau de flux et attend que l'un d'entre eux change de statut. Cette opération est équivalente à ce que fait la fonction socket_select(), hormis le fait qu'elle travaille sur un flux.

Les flux qui sont listés dans le paramètre read seront surveillés en lecture, c'est-à-dire si de nouveaux octets sont disponibles en lecture (pour être précis, si une lecture ne bloquera pas, ce qui inclut aussi les flux qui sont en fin de fichier, auquel cas un appel à la fonction fread() retournera une chaîne de taille 0).

Les flux qui sont listés dans le paramètre write seront surveillés en écriture (pour être précis, si une écriture ne bloquera pas).

Les flux qui sont listés dans le paramètre except seront surveillés pour voir si une exception est levée.

Note : Lorsque stream_select() se termine, les tableaux read, write et except sont modifiés pour indiquer quel flux ont actuellement changé de statut.

Les paramètres tv_sec et tv_usec forment le délai d'expiration, tv_sec spécifie le nombre de secondes tandis que tv_usec, le nombre de microsecondes. Le paramètre timeout représente la limite supérieure du temps que stream_select() doit attendre avant de se terminer. Si tv_sec et tv_usec sont tous les deux définis à 0, stream_select() n'attendra pas de données - à la place, elle se terminera immédiatement, indiquant le statut courant du flux. Si tv_sec vaut NULL, stream_select() peut se bloquer indéfiniment, se terminant uniquement lorsqu'un événement sur un des flux surveillés survient (ou si un signal interrompt l'appel système).

En cas de succès, stream_select() retourne le nombre de flux qui ont évolué, ce qui peut être 0 si le délai d'expiration a été atteint avant que les flux n'évoluent. En cas d'erreur, la fonction retournera FALSE et un avertissement sera renvoyé (cela peut apparaître si l'appel système est interrompu par un signal entrant).

Avertissement

Utiliser comme délai d'expiration une valeur de 0 vous permet de renvoyer instantanément le statut des flux, sinon, ce n'est pas une bonne idée d'utiliser une valeur de 0 dans une boucle, ce qui ferait que votre script consommerait beaucoup trop de temps processeur.

Il est préférable de spécifier une valeur de délai d'expiration de quelques secondes. Même si vous avez besoin d'exécuter d'autres codes en même temps, l'utilisation d'un délai d'expiration de moins de 200000 microsecondes devrait vous aider à réduire le temps processeur de votre script.

Souvenez-vous que le délai d'expiration représente le temps maximal qui s'écoulera ; stream_select() se terminera dès que les flux désirés seront prêts à être utilisés.

Vous n'êtes pas obligé de passer tous les tableaux à la fonction stream_select(). Vous pouvez en omettre certains, en utilisant un tableau vide ou la valeur NULL. N'oubliez pas que ces tableaux sont passés par référence et qu'ils seront modifiés lorsque stream_select() s'achèvera.

Cet exemple surveille si des données arrivent pour être lues soit dans $stream1, soit dans $stream2. Si le délai d'expiration vaut 0, la fonction se terminera immédiatement :

<?php
/* Preparation du tableau de flux lecture */
$read = array($stream1, $stream2);

if (
false === ($num_changed_streams = stream_select($read, $write = NULL, $except = NULL, 0))) {
  
/* Gestion d'erreur */
} elseif ($num_changed_streams > 0) {
  
/* Au moins un des flux a évolué  */
}
?>

Note : À cause d'une limitation du Moteur Zend actuel, il n'est pas possible de passer la valeur NULL directement comme paramètre d'une fonction qui s'attend à des paramètres passés par référence. Au lieu de cela, il est recommandé d'utiliser une variable temporaire, ou une expression dont le membre de gauche est une variable temporaire. Comme ceci :

<?php
stream_select
($r, $w, $e = NULL, 0);
?>

Note : Assurez-vous de bien utiliser l'opérateur === lorsque vous recherchez des erreurs. Comme stream_select() peut retourner 0, une comparaison effectuée à l'aide de == l'évaluerait à TRUE :

<?php
if (false === stream_select($r, $w, $e = NULL, 0)) {
   echo
"stream_select() failed\n";
}
?>

Note : Si vous avez écrit ou lu dans un flux qui est retourné dans les tableaux de flux, soyez bien conscient que ces flux n'ont peut être pas écrit ou lu la totalité des données demandées. Soyez en mesure de lire un seul octet.

Note : Notes aux utilisateurs de Windows : stream_select() utilisé sur une pipe retournée par proc_open() peut causer la perte de données sous Windows 98.

Utiliser la fonction stream_select() sur un descripteur de fichier retourné par proc_open() échoura et retournera FALSE sous Windows.

Voir aussi stream_set_blocking().



Rechercher une fonction PHP

Réseaux sociaux

Vous pouvez modifier vos préférences dans votre profil pour ne plus afficher les interactions avec les réseaux sociaux sur ces pages.

 

Nuage de mots clés

5 mots clés dont 0 définis manuellement (plus d'information...).

Avertissement

Cette page ne possède pas encore de mots clés manuels, ceci est donc un exemple automatique (les niveaux de pertinence sont fictifs, mais les liens sont valables). Pour tester le nuage avec une page qui contient des mots définis manuellement, vous pouvez cliquer ici.

Vous pouvez modifier vos préférences dans votre profil pour ne plus afficher le nuage de mots clés.

 

Références

  1. Consulter le document html Langue du document: fr Manuel PHP : http://be2.php.net, stream_select

Ces références et liens indiquent des documents consultés lors de la rédaction de cette page, ou qui peuvent apporter un complément d'information, mais les auteurs de ces sources ne peuvent être tenus responsables du contenu de cette page.
L'auteur de ce site est seul responsable de la manière dont sont présentés ici les différents concepts, et des libertés qui sont prises avec les ouvrages de référence. N'oubliez pas que vous devez croiser les informations de sources multiples afin de diminuer les risques d'erreurs.

 

Astuce pour imprimer les couleurs des cellules de tableaux : http://www.gaudry.be/ast-rf-450.html
Aucun commentaire pour cette page

© Ce document issu de l′infobrol est enregistré sous le certificat Cyber PrInterDeposit Digital Numbertection. Enregistrement IDDN n° 5329-5089
Document créé le 30/10/06 03:14, dernière modification le Vendredi 17 Juin 2011, 12:12
Source du document imprimé : http://www.gaudry.be/php-rf-function.stream-select.html Document affiché 1 fois ce mois de Juin.
St.Gaudry©07.01.02
Outils (masquer)
||
Recherche (afficher)
Recherche :

Utilisateur (masquer)
Navigation (masquer)
Apparence (afficher)
Stats (afficher)
15832 documents
452 astuces.
549 niouzes.
3099 definitions.
447 membres.
8115 messages.

Document genere en :
0,33 seconde

Mises à jour :
Mises à jour du site
Citation (masquer)
Les femmes sont faites pour être aimées, non pour être comprises.

Oscar Wilde
 
l'infobrol
Nous sommes le Dimanche 03 Juin 2012, 05:09, toutes les heures sont au format GMT+1.00 Heure, heure d'été (+1)