- Home
- Categorie
- Coding e Sistemistica
- Coding
- Alternative a file_get_contents()?
-
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.
-
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]
-
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
-
Grazie mille ad entrambi
-
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]
-
Grazie MenteLibera. Una cosa: $contents contiene il contenuto della pagina web caricata giusto?
Perchè poi devo andare ad analizzare il contenuto delle pagine.
-
Sì.
-
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?