par exemple, pour récupérer dans un tableau de chaînes les données lisibles sur plusieurs flux :
$buffer = array(); $remove = array(); $streams = array($sd1, $sd2, $sd3); $timeout = NULL; // on peut mettre un timeout en secondes while(true) { $r = array_diff($streams, $remove); if(!$r) break; $chg = stream_select($r, $w = NULL, $e = NULL, $timeout); if($chg === false) { // erreur, throw new Exception par exemple } if($chg > 0) { foreach($r as $sd) { $data = fread($sd, 4096); if($data === false) { // erreur } if($data == '') { $remove[] = $sd; } if(!isset($buffer[intval($sd)])) { $buffer[intval($sd)] = $data; } else { $buffer[intval($sd)] .= $data; } } } else { // time out (si fourni) } }