2012-10-18 9 views
5

Oto niektóre przykładowy kod:Jaki jest kanoniczny sposób na ustawienie limitu czasu odczytu w strumieniu w PHP?

<?php 
$fp = fsockopen($host, $port, $errno, $errstr, $connectTimeout); 

if (!$fp) { 
    echo "$errstr ($errno)<br />\n"; 
} else { 
    echo "connected\n"; 
    while (!feof($fp)) { 
     echo fgets($fp, 128); 
    } 
    fclose($fp); 
} 

Widziałem stream_set_timeout($fp, 5); i
socket_set_option($fp, SOL_SOCKET, SO_RCVTIMEO, array("sec"=>5, "usec"=>0));, ale odczytu czasu nigdy na zewnątrz.

Widziałem wiele wad w docs PHP dla stream_set_timeout():

Funkcja ta nie działa z zaawansowanych operacji jak stream_socket_recvfrom(), użyj stream_select() z parametrem zamiast limitu czasu.

Wolałbym nie używać select() lub pętli. Jaki jest kanoniczny sposób na blokowanie odczytu z przekroczeniem limitu czasu?

Odpowiedz

2

socket_set_option jest dla gniazd utworzonych za pomocą socket_create.

stream_set_timeout służy do strumieni, takich jak utworzone przez fopen lub fsockopen.

Php docs zawierają przykładowy kod, w jaki sposób można go użyć z fsockopen.

+0

Dzięki. Jak już powiedziałem w pytaniu używam 'fsockopen' ale' stream_set_timeout ($ fp, 5); 'nie działa. – Andy

Powiązane problemy