Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    Mandare in timeout fopen fgets file ecc.

    Ho fatto una ricerca ma non ho trovato nulla.
    Come faccio a mandare in timeout fopen?
    Ad esempio voglio leggere un file remoto, ma se esso non e' disponibile, od il server e' troppo lento, voglio addandonare l'operazione. Ad esempio se superi 1 secondo abbandona l'operazione. Come si fa?

    Inoltre ad andare in timeout dovrebbe essere fopen, fgets, file oppure altro?

    Grazie.
    WiWa le dottoresse di 40 ani.
    "Il potere delle donne è solo dovuto all'idiozia di molti uomini ... se non sbavassero come cani alla prima che gliela fa intravedere, le cose andrebbero diversamente."
    (alexmaz © - rivisitato by xxxfiles)

  2. #2
    Scusate per l'UP, ma nessuno sa almeno se la cosa in php si puo' fare?
    WiWa le dottoresse di 40 ani.
    "Il potere delle donne è solo dovuto all'idiozia di molti uomini ... se non sbavassero come cani alla prima che gliela fa intravedere, le cose andrebbero diversamente."
    (alexmaz © - rivisitato by xxxfiles)

  3. #3
    set_time_limit() manda in timeout lo script intero

    http://it.php.net/manual/en/function...et-timeout.php

    mand ain timeout la lettura

    Se usi fsockopen anzichè fopen hai un argomento timeout nella funzione
    per favore NIENTE PVT TECNICI da sconosciuti

  4. #4
    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:
    WiWa le dottoresse di 40 ani.
    "Il potere delle donne è solo dovuto all'idiozia di molti uomini ... se non sbavassero come cani alla prima che gliela fa intravedere, le cose andrebbero diversamente."
    (alexmaz © - rivisitato by xxxfiles)

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.