2012-10-18 13 views
5

Ecco alcuni esempi di codice:Qual è il modo canonico per inserire un timeout di lettura su uno streaming in 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); 
} 

Ho visto stream_set_timeout($fp, 5); e
socket_set_option($fp, SOL_SOCKET, SO_RCVTIMEO, array("sec"=>5, "usec"=>0));, ma la lettura mai timeout.

Ho visto parecchi avvertimenti nella documentazione di PHP per stream_set_timeout():

Questa funzione non funziona con le operazioni avanzate come stream_socket_recvfrom(), l'uso stream_select() con il parametro di timeout, invece.

Preferisco non utilizzare select() o un ciclo. Qual è il modo canonico per avere un blocco letto con timeout?

risposta

2

socket_set_option è per prese create con socket_create.

stream_set_timeout è per flussi, come creato da fopen o fsockopen.

Php docs contengono codice di esempio su come può essere utilizzato con fsockopen.

+0

Grazie. Come ho detto nella domanda sto usando 'fsockopen' ma' stream_set_timeout ($ fp, 5); 'non funziona. – Andy

Problemi correlati