Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2007
    Messaggi
    9

    fsockopen e risposte del server

    Salve, stavo seguendo la guida trovata su php.html.it ai socket e come richiamare pagine esterne, ma mi sono scontrato con un problema che seppur banale mi sta facendo impazzire, in pratica il codice in questione:

    Codice PHP:
    $host="localhost" ;
    $target="info.php" ;
    $port=80 ;
    $timeout=60;
    $protocol="HTTP/1.0" ;

    $br="\r\n" ;

    $sk=fsockopen($host,$port,$errnum,$errstr,$timeout) ;

    if(!
    is_resource($sk)){

    exit(
    "Connessione fallita: ".$errnum." ".$errstr) ;

    }

    else{

    $headers="GET ".$target." ".$protocol.$br ;
    $headers.="Accept: image/gif, image/x-xbitmap, image/jpeg".$br ;
    $headers.="Accept-Language: Italiano".$br ;
    $headers.="Host: ".$host.$br ;
    $headers.="Connection: Keep-Alive".$br ;
    $headers.="User-Agent: Socket-PHP-browser 1.0".$br;
    $headers.="X-INVENTATO: Adamo ".$br.$br;
    fputs($sk,$headers) ;

    $dati="" ;

    while (!
    feof($sk)) {

    $dati.= fgets($sk,2048);

    }

    }

    fclose($sk) ;

    echo(
    $dati) ; 
    Ora la pagina viene richiamata, ma mi ritrovo prima dell'inclusione anche una stringa che credo sia la risposta del mio server:

    "HTTP/1.1 200 OK Cache-Control: public Content-Type: text/html; charset= Expires: Sat Jan 24 16:08:40 2009 Last-Modified: Sat Jan 24 16:08:40 2009 Server: Microsoft-IIS/6.0 X-Powered-By: ASP.NET Date: Sat, 24 Jan 2009 16:08:40 GMT Connection: close "

    non capisco come togliere dalla stampa a video questi dati

  2. #2
    E' sufficiente che cerchi all'interno della risposta del server la prima occorrenza di due righe vuote (\r\n\r\n). Questo delimitatore indica la fine delle intestazioni HTTP e l'inizio del contenuto della risposta (es. l'HTML).

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2007
    Messaggi
    9
    scusa la banalità della domanda quindi basta che creo una funziona che cerchi le prime due righe vuote e le isoli dalla stampa a video?

  4. #4
    Puoi creare una funzione oppure eseguire fgets() in un ciclo fintanto che il suo risultato sia una riga vuota. In entrambi i casi ciò che verrà letto successivamente sarà il contenuto della risposta HTTP.

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2007
    Messaggi
    9
    Grazie della dritta, non sono riuscito a fare il while come consilgiato da te (sono alle prime armi in php) ma ho aggirato il problema eseguendo un ciclo contatore per saltare le prime 9 righe:

    Codice PHP:
    $i 0;

    while(
    $i <= 8){

    $head.= fgets($sk,2048);
    $i++;


    P.s sinceramente mi è rimasta la curisità di realizzare lo stesso ciclo come da te consigliato
    pensavo fosse:

    Codice PHP:

    while(fgets($sk) != "\r\n\r\n"){

    $head.= fgets($sk,2048);


    Però così salta solo la prima riga...

  6. #6
    Originariamente inviato da Nt081
    ho aggirato il problema eseguendo un ciclo contatore per saltare le prime 9 righe
    Non è una soluzione affidabile, gli header possono essere più o meno di 9.

    Originariamente inviato da Nt081
    P.s sinceramente mi è rimasta la curisità di realizzare lo stesso ciclo come da te consigliato
    pensavo fosse:
    Rileggi quanto ho scritto e la descrizione sul funzionamento di fgets().

  7. #7
    Utente di HTML.it
    Registrato dal
    Oct 2007
    Messaggi
    9
    Ora ci sono:

    Codice PHP:
    $head "";

        while( 
    $head != "\r\n" )
        {
        
    $head fgets$sk 4096 ) ; 
        
        } 
    Grazie mille dei consigli!!

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.