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.
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.0\r\n"; //
            $out .= "Host: ".$urlpart['host']."\r\n";
            $out .= "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.9.2.17) Gecko/20110420 Firefox/3.6.17\r\n";
            $out .= "Connection: Close\r\n\r\n";
            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,"\r\n\r\n");
            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.

Exemple
Enregistrer le code HTML de la page d'accueil dans le fichier tmp.html
FileGetContent::save('http://www.fobec.com/CMS/index.php', $_SERVER['DOCUMENT_ROOT'].'/tmp.html');

Ajouter un commentaire
Pseudo
Adresse email
Site internet (optionnel)
Votre commentaire
Fiche de l'article
Mise a jour19/05/2011
VisualisationVu 431 fois
PublicInternaute
CategorieWeb - PHP - Reseaux
Auteur de l'article
Fobec Fobec
connecté le 09/05/2012
36 ans - France Nord-Est
104 articles dans la section
Contacter l'auteur
Partager l'article