2017-07-13 12 views
-1

Donc, ce que j'ai ici est une fonction qui lit la sortie d'un socket.Fread variable max de 8192

$content=$this->tsread(256); 

function tsread($size,$timeout=1) 
{ 
    global $handle; 
    $start=microtime(true); 
    do 
    { 
     usleep($size*10); 
     $data=fread($handle,1); 
     $info=stream_get_meta_data($handle); 
    } 
    while ((microtime(true)-$start)<$timeout and $info['timed_out']); 
    do 
    { 
     usleep($size*10); 
     if ($info['unread_bytes']>$size) 
     { 
      $data.=fread($handle,$size); 
     } 
     else 
     { 
      $data.=fread($handle,$info['unread_bytes']); 
     }    
     $info=stream_get_meta_data($handle); 
    } 
    while ($info['unread_bytes']>0); 
    return $data; 
} 

Habituellement, cela se lit comme suit avec succès la sortie, mais récemment la sortie de la prise a été plus grande et la fonction ne lit pas avec succès tout.

Lorsque je strlen ($ data) Je reçois une valeur de 8192.

Y at-il une taille variable max? Ou y a-t-il quelque chose dans la fonction qui limite la longueur de $ data à 8192?

Répondre

0

si le flux est en lecture et en mémoire tampon, il ne représente pas un simple fichier, au plus une lecture jusqu'à un nombre d'octets égal à la taille de morceau (généralement 8192) est fait; en fonction des données mises en tampon précédemment, la taille des données renvoyées peut être plus grand que le morceau size

+0

je régler la taille de bloc à 256 avec 'tsread (256);' et '$ data = fread (. $ handle, $ taille); – codexo10Z

+0

@ codexo10Z avez-vous répondre à cette question? Si vous en avez un autre, comment le faire? Posez une autre question avec le code entier, la classe et/ou le framework que vous utilisez. – user10089632