Innazitutto grazie del tuo link. Ci ho dato una occhiata, ma non riesco a venirne fuori.
Ho scritto questo codice
codice:
$url = $_POST["pagina"];
@$fp = fsockopen("$url", 80, $errno, $errstr, 1);
if ($fp) {
stream_set_timeout($fp, 50, 0);
$status = socket_get_status($fp);
$data = "";
while(!feof($fp) && !$status['timed_out']) {
$data .= fgets($fp, 1024);
$status = socket_get_status($fp);
print"prova
";
};
if (!$status['timed_out']) {
echo "Lettura in tempo max.
";
print"$data
";
} else {
echo "Lettura non in tempo max.
";
};
} else {
echo "Impossibile leggere il file remoto.
";
};
var_dump(stream_get_meta_data($fp));
fclose($fp);
Ora 50 secondi dovrebbe essere sufficiente, ma ottengo sempre questo output.
prova
Lettura non in tempo max.
array(5) { ["stream_type"]=> string(6) "socket" ["unread_bytes"]=> int(0) ["timed_out"]=> bool(true) ["blocked"]=> bool(true) ["eof"]=> bool(false) }
Faccio notare che se richiamo file molti grandi ho la stampa solo di una volta della stringa "prova", come dire che entra nel ciclo while una sola volta.
Forse non ho capito bene come funziona la funzione stream_set_timeout, in quanto se metto stream_set_timeout($fp, 50, 0) lo script mi dura 50 secondi, se metto stream_set_timeout($fp, 2, 0) mi dura 2 secondi dandomi sempre lo stesso output che ho riportato sopra. Cioe' sembra che quel numero indichi il tempo che deve mettere nella lettura del file e non il tempo max, oltre il quale abbandonare l'operazione.
Ovviamente ho fatto la prova su file remoti che sono raggiuntibili.
In dove sbaglio? :master: