Vous n'êtes pas identifié.

Annonce

#1 Générateur de sitemap xml du 05-05-2008 23:52:16

c00lman
Administrateur
Date d'inscription: 16-08-2007
Messages: 2164
Site web

Générateur de sitemap xml

Voici un petit générateur de sitemap XML très simple à utiliser.
1-Créez un fichier nommé sitemap.php et collez y le code ci dessous.

2-Editer juste les variables suivantes:
-------------------------------------------
$ExtensionsAutorises= array('php','php3','html','htm');
Placez ici les extensions autorisées à être listé séparé par une virgule et une simple quote ,'blabla'.
-------------------------------------------
$DossiersInterdits = array('dossier1','dossier2','dossier3','etc...');
Placez ici les dossiers qui ne sont pas autorisées à être listé séparé par une virgule et une simple quote ,'blabla'.
-------------------------------------------
$FichiersInterdits = array('fichier1.php','fichier2.php','fichier3.php','etc..');
Placez ici les fichiers qui ne sont pas autorisées à être listé séparé par une virgule et une simple quote ,'blabla'.
-------------------------------------------

3-Envoyez ce fichier sur votre serveur

4-Rendez vous à l'adresse -http://monsite.free.fr/sitemap.php

5-Votre fichier sitemap.xml à été créé, allé voir sur -http://monsite.free.fr/sitemap.xml

Code:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr"><head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />

<style type="text/css">
body {
    text-align: left;
    background-color: #FFFFFF;
}

.center {
    text-align: center;
}

.italic  {
    font-style: italic;
}
</style>
<title>Générateur de fichier sitemap</title>

</head>
<body id="haut">
<h2 class="center">Générateur de sitemap en xml</h2>


<h2>Listages des urls autorisés pour le sitemap</h2>

<?php
//set_time_limit(60*10); pas forcément utile : fixe le temps d'exécution du script à 10 minutes (10*60 seconde)

define('LIMITLIENPARFICHIER',1000); // 1000 liens maximums dans chaque fichier
define('LIMITLIENINDEXE',50000); // 50 000 liens maximum au total

// générateur de fichiers sitemap.xml pour google
// 1- éditer les fichiers, extensions et dossiers interdits ainsi que leur mode de fonctionnement (0 par défaut) ( sans /)
// 2- éditez la variable $compressionGZ pour avoir ou non une compression sur vos fichiers (valable uniquement si vous avez plus de 1000 liens)
// 3- uploadez le fichier sur votre compte et lancez à partir d'un navigateur

/** note :

Si vous avez
./image/
./image/ete
./image/hiver

alors si vous mettez "image" dans dossier interdit, tous les sous dossiers seront interdits
si vous mettez "hiver" alors le dossier hiver sera interdit
ne mettez pas "/image/hiver"
*/

$racine= 'http://'.$_SERVER['HTTP_HOST'];
$compressionGZ = false; // false pas de compression true compression
$Goption=0;// option de filtrage (laissez 0 si vous ne comprenez pas)
// 0 - filtrage bit à bit (du type dossiercherche==dossierencour)
// 1 - présence d'une partie du mot dans le dossier
// 2 - filtrage par expressions réguliéres
$ExtensionsAutorises= array('php','php3','html','htm');
$DossiersInterdits = array('dossier1','dossier2','dossier3','etc...');
$FichiersInterdits = array('fichier1.php','fichier2.php','fichier3.php','etc..');

$myfiles=GetDirContents('.');

/**
function Dossier_Autorisé
param : $DossierCourant
return : vrai si dossier autorisé faux sinon
*/

function Dossier_Autorisé($DossierCourant){
    global $DossiersInterdits;
    return Est_Autorisé($DossierCourant, $DossiersInterdits);
}

/**
function Dossier_Autorisé
param : $DossierCourant
return : vrai si dossier autorisé faux sinon
*/

function Fichier_Autorisé($FichierCourant){
    global $FichiersInterdits;
    return Est_Autorisé($FichierCourant, $FichiersInterdits);
}

/**
function Extension_Autorisé

*/
function Extension_Autorisé($ExtensionCourante){
    global $ExtensionsAutorises;
    return !Est_Autorisé($ExtensionCourante,$ExtensionsAutorises);
}

/**
permet de réaliser les deux fonctions précédentes
*/
function Est_Autorisé($DossierCourant,$Interdits){
    global $Goption;

    $drapeau = true;
    while ($drapeau && list(,$Dossier)=each($Interdits) ){
        if ( ComparaisonFichier($DossierCourant,$Dossier,$Goption))$drapeau = false;
    }
    reset($Interdits);
    return $drapeau;
}

function ComparaisonFichier($DossierCourant,$Dossier,$option=0){
    switch ($option){
        case 0:
            // faire une comparaison bit à bit
            return ($DossierCourant == $Dossier);
        break;

        case 1:
            // faire un filtre avec strpos
            $pos = strpos($mystring, $findme);
            if ($pos === false) {
                return false;
            } else {
                return true;
            }
        break;

        case 2:
            // faire un filtre avec les expressions réguliéres
            return ereg($Dossier,$DossierCourant);
        break;
    }
}
/**
fonction getextension : retourne l'extension d'un fichier
source : nexen.net
param : $fichier
return: extension du fichier
*/
function getextension($fichier){
    $bouts = explode('.', $fichier);
    return array_pop($bouts);
}


/**
fonction GetDirContents
param : $dir dossier racine (le test est récursif)
return : liste des urlsDossier_Autorisé
*/
function GetDirContents($dir){
    global $racine;
    $i=0;
    ini_set('max_execution_time',10);
    if (!is_dir($dir)){die ('PROBLEME: '.$dir.'!');}


    if ($root=@opendir($dir)){
        while ($file=readdir($root)){
            if($file=='.' || $file=='..'){continue;}
            if(is_dir($dir.'/'.$file) && Dossier_Autorisé($file)){

                if(!IsSet($files)){$files = NULL;}
                $files=array_merge($files,GetDirContents($dir.'/'.$file));

            }else{

                $extension=getextension($file);

                if (Extension_Autorisé($extension) && Fichier_Autorisé($file)){
                    echo '<strong>',$dir,'</strong>/',htmlentities($file),'<br />',"\r\n";
                    $files[$i]['lien']=utf8_encode($racine.substr($dir,1).'/'.$file);

                    // rajout de la date
                    // source : http://www.orvinfait.fr/scripts_web_performant.html
                    $modi_fich=filemtime($dir.'/'.$file);
                    $files[$i]['date']=date('Y-m-d', $modi_fich);
                    $i++;
                }
            }
        }
    }
    if(!IsSet($files)){$files = NULL;}
    return $files;
}




$nbliens=count($myfiles);
echo '<span class="italic">'.$nbliens.' liens référencés dans les fichiers.</span><br />',"\r\n";

if ($nbliens>LIMITLIENPARFICHIER){
    // utilisation de la norme pour les sites souhaitant référencés plus de 1000 liens
    // un fichier sitemap à générer en plus
    $numfichier=1;
    echo '<h2>Génération des fichiers sitemapXX.xml...</h2>',"\r\n";
}else {
    $numfichier='';
    echo '<h2>Génération du fichier sitemap.xml...</h2>',"\r\n";
}

if ($compressionGZ)
{
    //http://docs.php.net/en/ref.zlib.html
    $open='gzopen';
    $write='gzwrite';
    $close='gzclose';
    $GZ='.gz';
} else
{
    $open='fopen';
    $write='fwrite';
    $close='fclose';
    $GZ='';
}

$CurLiens=0;
while ($CurLiens<$nbliens && $CurLiens<LIMITLIENINDEXE )
{
    if ($fp = $open('sitemap'.$numfichier.'.xml'.$GZ, 'w')){
        $write($fp,'<?xml version="1.0" encoding="UTF-8"?>'."\r\n");
        $write($fp,'<urlset xmlns="http://www.google.com/schemas/sitemap/0.84">'."\r\n");
        $Limite = $CurLiens + LIMITLIENPARFICHIER; // si lien courant vaut 20000 dés qu'on arrive à 21000 on arrete

        while ($CurLiens< $Limite && $CurLiens<LIMITLIENINDEXE && list(,$file)=each($myfiles))
        {
            $write($fp,'<url> '."\r\n".' <loc>'.$file['lien'].'</loc> '."\r\n \r\n");
            $write($fp,"\t\t".'<lastmod>'.$file['date'].'</lastmod>'."\n");
            $write($fp,'<changefreq>monthly</changefreq>');
            $write($fp,'<priority>0.5</priority></url>');
            $CurLiens ++;
        }
        $write($fp, '</urlset>');
        $close($fp);
        echo '<a href="./sitemap'.$numfichier.'.xml'.$GZ.'" target="_blank">fichier sitemap'.$numfichier.'.xml'.$GZ.'</a><br />',"\r\n";
    }else{

        echo 'sitemap'.$numfichier.'.xml',"\r\n"
        ,'<br /><br /><textarea rows="30" cols="100">',"\r\n"
        ,'<?xml version="1.0" encoding="UTF-8"?>',"\r\n"
        ,'<urlset xmlns="http://www.google.com/schemas/sitemap/0.84">',"\r\n";

     $Limite = $CurLiens + LIMITLIENPARFICHIER;
    while ($CurLiens< $Limite  && $CurLiens<LIMITLIENINDEXE && list(,$file)=each($myfiles))
    {
        echo '<url> '."\r\n".' <loc>'.$file['lien'].'</loc> '."\r\n ";
        echo '<lastmod>'.$file['date'].'</lastmod>'."\r\n";
        echo '<changefreq>monthly</changefreq>'."\r\n";
        echo '<priority>0.5</priority></url>'."\r\n";
        $CurLiens ++;
    }
    echo  '</urlset></textarea><br />';

 }
 $numfichier++;
}

if ($numfichier!=1)
{
    echo '<h2>Génération du fichier sitemap index file.xml...</h2>';
    // génération du sitemap index file
    if ($fp = fopen('sitemap.xml', 'w+')){

        fwrite($fp, '<?xml version="1.0" encoding="UTF-8"?>'."\r\n");
        fwrite($fp, '<sitemapindex xmlns="http://www.google.com/schemas/sitemap/0.84">'."\r\n");
        $date=date('Y-m-d');

        for($k=1;$k<$numfichier;$k++)
        {
            fwrite($fp, '<sitemap>'."\r\n");
            fwrite($fp,'<loc>'.$racine.'/sitemap'.$k.'.xml'.$GZ.'</loc>'."\r\n");
            fwrite($fp, '<lastmod>'.$date.'</lastmod>'."\r\n");
            fwrite($fp,'</sitemap>'."\r\n");

        }
        fwrite($fp, '</sitemapindex>'."\r\n");
        fclose($fp);
        echo '<a href="./sitemap.xml" target="_blank">fichier sitemap.xml</a><br />',"\r\n";

    } else
    {
        echo '<br /><br /><textarea rows="30" cols="100">',"\r\n"
        ,'<?xml version="1.0" encoding="UTF-8"?>',"\r\n"
        ,'<sitemapindex xmlns="http://www.google.com/schemas/sitemap/0.84">',"\r\n";
        $date=date("Y-m-d");
        for($k=1;$k<$numfichier;$k++)
        {
        echo '<sitemap>',"\r\n"
        ,'<loc>',$racine,'/sitemap',$k,'.xml</loc>',"\r\n"
        ,'<lastmod>',$date,'</lastmod>',"\r\n"
        ,'</sitemap>',"\r\n";
        }
        echo '</sitemapindex>',"\r\n";

    }
}
?>
<span class="italic">génération du sitemap terminé</span>
<p class="center"><a href="#haut" title="Retourner en Haut de la page">Haut de la page</a></p>
</body>

</html>

Note: Le fichier XML ne peut être actualisé qu'en vous rendant systématiquement sur votre fichier sitemap.php. Donc si vous ajoutez un nouveau dossier ou fichier, pensez à éditer les 3 variables du haut puis rendez vous de nouveau sur le fichier sitemap.php pour actualiser le fichier sitemap.xml.

Hors ligne

 

05-05-2008 23:52:16

Mister $$$


Propulsé par PunBB
© Copyright 2007
Forum créer un site

Partenaires de « créer un site internet »