• User

    Alternative a file_get_contents()?

    Ciao a tutti, ho questo problema: devo realizzare una sorta di motore di ricerca per analizzare il contenuto di alcune pagine web prese a caso.
    Ovvero carico la pagina con file_get_contents(), cerco nel contenuto quello che mi serve, cerco anche i vari link presenti nella pagina che carico in un vettore e che poi ne estraggo uno a random. Quello estratto lo metto in una variabile ($url) e poi lo metto come arrgomento nella funzione file_get_contents("$url");

    Il problema è che la prima pagina che analizza (quella che imposto io manualmente all'inizio del PHP) mela analizza, per le altre mi da il seguente errore:

    Warning: file_get_contents(...) : failed to open stream: H T T P request failed! H T T P/1.0 500 Server Error

    Il codice:
    $url = "pagina-iniziale.h t m l";
    do{
    $str = file_get_contents($url);
    $link = file_get_contents($url);

    ......

    //Cerco i link
    $link = explode('"', $link);
    for ($i = 0; $i<=100; $i++){
    $ec = strstr($link*, 'h t t p: //');
    $ico = strpos($ec, '.ico');
    $css = strpos($ec, '.css');
    $js = strpos($ec, '.js');
    $pv = strpos($ec, ';');
    if($ico == "" && $css == "" && $js == "" && $pv == "" && $ec != ""){
    $vector = $ec;
    $c++;
    $dim = $c;
    }
    }

    $rnd = rand(1, $dim);
    $url = "$vector[$rnd]";
    $dowhile = 10;
    }while($dowhile == 10);
    

    Qualcuno può darmi una mano. Ho letto di fsockopen() e di curl(), ma non riesco ad utilizzarli.
    Ciao e grazie in anticipo.


  • Super User

    allow_url_fopen è abilitato in php.ini?

    Con curl

    [PHP]
    function curl($url){
    $ch = curl_init();
    curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
    curl_setopt($ch,CURLOPT_URL,$url);
    $data = curl_exec($ch);
    curl_close($ch);
    return $data;
    }
    $google = curl('h**p://google.com');
    [/PHP]


  • User

    dall'errore 500 sembra che sia la risposta del server ad andare in errore.
    probabilmente i parametri dell'url passati alla funzione sobo 'sporchi' e interrogano male il server restituendo 500.
    prova a fare un print di tutti gli url che richiami e verifica se quelli in 500 danno lo stesso errore anche da browser


  • User

    Grazie mille ad entrambi


  • User Attivo

    cURL è una libreria che per funzionare deve essere installata. Invece la funzione nativa per scaricare i file è fread().
    Sul manuale c'è una bella spiegazione con numerosi esempi d'uso ed approfondimenti, per esperienza consiglio ricorrere alla lettura di un blocco di file alla volta anziché utilizzare la funzione filesize() perché alcuni server rispondono con dimensione nulla.
    Lo script funzionante è questo:
    [PHP]
    $handle = fopen("h**p:// www . example.com /", "r"); # <-------------- mettere l'URL corretto qui!
    $contents = '';
    while (!feof($handle)) {
    $contents .= fread($handle, 8192);
    }
    fclose($handle);
    [/PHP]


  • User

    Grazie MenteLibera. Una cosa: $contents contiene il contenuto della pagina web caricata giusto?
    Perchè poi devo andare ad analizzare il contenuto delle pagine.


  • User Attivo

    Sì.


  • User

    ciao ho provato nel modo in cui mi hai consigliato però mi da il seguente problema:
    feof(): supplied argument is not a valid stream resource in ...
    fread(): supplied argument is not a valid stream resource in ...

    Cosa può essere?