[PHP] Salvare il codice HTML di una pagina web
pubblicato in PHP, Webmaster il feb.14, 2010
Per salvare il codice HTML di una pagina web, in PHP esiste la comoda funzione file_get_contents(), compatibile con PHP 4 e 5.

Si tratta di una funzione molto semplice, in grado di leggere il contenuto di un file e memorizzarlo dentro una stringa. I dati vengono codificati in UTF-8, ma è possibile cambiare il charset.
Può leggere sia file di testo che file binari, e permette di personalizzare gli HTTP headers creando uno stream context con la funzione stream_context_create().
In questo articolo scopriamo tutti i dettagli e vediamo alcuni esempi…
Requisiti e Soluzioni ai problemi
Per recuperare il contenuto di un file a partire da un URL esterno, deve essere abilitata la direttiva allow_url_fopen sul server. Esegui l’istruzione phpinfo() per conoscere la configurazione di Apache e, se necessario, modifica il file httpd.conf.
Se queste impostazioni non sono corrette, la funzione file_get_contents() non funzionerà come voluto.
Salvare codice HTML di una pagina web
Niente di più semplice… due righe di codice e il gioco è fatto:
$url = "http://www.google.it/"; $homepage = file_get_contents($url); $file_to_update = "./webpages/my_google_web_page.html"; if(!file_exists($file_to_update)) { $stream = fopen($file_to_update, "w"); fwrite($stream, $homepage); fclose($stream); }
Nell’esempio sopra riportato, ho “rubato” l’homepage di Google e l’ho salvata nel file my_google_web_page.html. Potete personalizzare lo script secondo le vostre esigenze.
Modificare gli headers HTTP
Possiamo anche modificare gli headers HTTP prima di effettuare la chiamata con file_get_contents(). Vediamo il codice e poi lo commentiamo:
// Creo la struttura stream $opts = array( 'http'=>array( 'method'=>"GET", 'header'=>"Accept-language: it\r\n" . "Content-Type: text/html; charset=iso-8859-1\r\n" ) ); // Genero il context stream $context = stream_context_create($opts); // Effettuo la richiesta utilizzando gli headers HTTP personalizzati $file = file_get_contents('http://www.google.it/', false, $context);
Anche in questo caso ho utilizzato San Google come cavia… La prima istruzione è la più importante, perchè ci permette di modificare l’header da utilizzare nella richiesta.
Possiamo impostare il tipo di richiesta (GET o POST) e aggiungere qualsiasi configurazione all’header HTTP (Content-language, Content-length, Cache-Control, etc.)
Successivamente, con la funzione stream_context_create(), creiamo l’oggetto stream da passare alla funzione interessata. Il parametro false nella chiamata alla funzione file_get_contents() serve ad indicare che non vogliamo specificare alcun flag.
Leggere solo una parte di un file
La funzione file_get_contents(), che finora abbiamo utilizzato per ricavare il codice HTML completo di una pagina web, ci permette anche di leggere una sequenza di caratteri, a partire da un offset.
// Legge 14 caratteri a partire dal 21° carattere $section = file_get_contents('http://www.google.it/', NULL, NULL, 20, 14);
Elaborare il documento HTML
Dopo aver salvato il codice HTML della pagina, possiamo elaborare le informazioni a nostro piacimento. Ad esempio, potremmo voler ricavare i meta tag… allo scopo possiamo utilizzare le espressioni regolari:
$file_to_update = "./webpages/my_google_web_page.html"; if(file_exists($file_to_update)) { $stream = file_get_contents($file_to_update); if (preg_match("/<title>(.*)<\/title>/", $source, $meta_tit) && preg_match("/<meta name=\"description\" content=\"(.*)\" \/>/", $source, $meta_des)) { echo "title: " . $meta_tit[1] . "<br />"; echo "description: " . $meta_des[1]; } }
Nell’esempio ho utilizzato la funzione file_get_contents() per aprire il file salvato in precedenza… ho utilizzato la funzione preg_match() per cercare con le regular expressions i meta tag title e description. Ho recuperato il loro valore e l’ho visualizzato.
Conclusioni
Abbiamo visto che la funzione file_get_contents() ci permette di salvare il codice di una pagina web a partire dal suo URL. Può essere codice HTML, XML, testo, o qualsiasi altra cosa.
Ovviamente recupera il codice “visibile” e non le istruzioni lato server che generano la pagina di partenza.
Tags: file_get_contents, stream_context_create, tips







Loading ...
Inserisci il tuo commento