loufoque
mercredi 6 juillet 2005 à 14:49
par exemple, pour récupérer dans un tableau de chaînes les données lisibles sur plusieurs flux :
CODE
$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)
}
}