Publié le 19/05/2011
Auteur fobec
Réseaux sociaux
0 partages
0 tweets
0 plus
0 commentaires

Enregistrer une page internet dans un fichier

Charger un fichier sur un serveur web est une opération de base de tout navigateur internet. En PHP, la fonction file_get_contents() ou encore l'extension curl facilitent le chargement de contenu. Toutes les fonctions utilisent une communication via les sockets pour communiquer avec le serveur distant.

Charger une page HTML avec les sockets

La class FileGetContent reprend une à une les fonctions pour communiquer avec un serveur web:
- Ouvrir une connexion avec fsockopen,
- Envoyer la commande GET au serveur web,
- Ecouter le port 80 et réceptionner les données
- Enregistrer le code HTML dans un fichier.
<?php
/******************************************************************************
* Enregistrer une page internet dans un fichier
* @copyright Fobec 2011
******************************************************************************/
class FileGetContent {
 
    static public function save($url,$filename) {
/****************************************
* Décomposer l'url
****************************************/
        $urlpart=parse_url($url);
        if (!isset($urlpart['host'])) {
            throw new Exception("Invalid URL");
        }
 
/****************************************
* Ouvrir une connexion
****************************************/
        $fp = fsockopen($urlpart['host'], 80);
        if (!$fp) {
            throw new Exception("Socket not open");
        } else {
            $path='/';
            if (isset($urlpart['path'])) {
                $path=$urlpart['path'];
            }
 
/****************************************
* Envoyer la commande GET au serveur
****************************************/
            $out = "GET ".$path." HTTP/1.0rn"; //
            $out .= "Host: ".$urlpart['host']."rn";
            $out .= "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.9.2.17) Gecko/20110420 Firefox/3.6.17rn";
            $out .= "Connection: Closernrn";
            fwrite($fp, $out);
 
/****************************************
* Ecouter le port 80 et receptionner les données
****************************************/
            $buf='';
            while (!feof($fp)) {
                $buf.=fgets($fp);
            }
            fclose($fp);
 
/****************************************
* Effacer le header
****************************************/
            $p=strpos($buf,"rnrn");
            if ($p!==false) {
                $buf= substr($buf, $p);
            }
 
/****************************************
* Enregistrer le code HTML dans un fichier
****************************************/
            $ft = fopen ($filename, "a");
            fputs ($ft, $buf);
            fclose ($ft);
        }
    }
}
?>
Note: la redirection n'est pas traitée.

Enregistrer une page HTML

Comment enregistrer le code HTML de la page d'accueil dans le fichier tmp.html. La class automatise les fonctions suivants:
- ouverture d'une connexion avec le serveur distant,
- envoi de la requête HTTP,
- réception puis enregistrement du code source.
<?php
FileGetContent::save('http://www.fobec.com/CMS/index.php', $_SERVER['DOCUMENT_ROOT'].'/tmp.html');
?>

La class illustre une communication client-serveur avec les sockets. Dans notre cas, le contenu de la page HTML est enregistré dans un fichier.
Le script est à utiliser avec précaution car il ne gère pas les timeout, les redirections et les codes d'erreur.

Ajouter un commentaire

Les champs marqués d'un * sont obligatoires, les adresses emails se sont pas publiées.

A lire aussi

Réseaux sociaux
Présentation de l'article
Catégorie
php5 - class
Mise a jour
19/05/2011
Visualisation
vu 4850 fois
Public
Internaute
Auteur de la publication
Fobec
Admin
Auteur de 261 articles
|BIO_PSEUDO|
Commentaires récents

Publié par Yannick dans tuto

Sur un de mes sites j'ai vraiment du mal a gerer le gzip sur 1and1, Je vais tout de suite tester tout ca et je vous tiens informe :)

Publié par Connan dans php5

j'utilise mysql phpmyadmin et j'ai cree une table IP mais j'ai mis varchart(15) mais quese qui faut que je fasse pour stocker l'ip des joueurs qui s'inscrivent

Publié par taje dans CMS

je suis débutant et je veut participer et évoluer

Publié par Fobec dans tuto

Bonjour,

Sur Fobec.com, nous utilisons mod_expires.c pour envoyer automatiquement un code 304 au navigateur internet.
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType im...

Publié par fobec dans tuto

Effectivement, l'interface du site a evolue. Le lien de telechargement est ici: http://www.rainforestnet.com/download/sample.zip