GENERATEUR DE SITEMAP POUR GOOGLE

ImmortalPC Messages postés 954 Date d'inscription mardi 11 mai 2004 Statut Membre Dernière intervention 11 novembre 2008 - 17 juin 2005 à 10:56
hello6891 Messages postés 5 Date d'inscription jeudi 25 août 2005 Statut Membre Dernière intervention 29 septembre 2008 - 18 févr. 2007 à 10:40
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/32104-generateur-de-sitemap-pour-google

hello6891 Messages postés 5 Date d'inscription jeudi 25 août 2005 Statut Membre Dernière intervention 29 septembre 2008
18 févr. 2007 à 10:40
Merci beaucoup pour ce script qui est vraiment très utile !
Bravo !
cs_legaulois Messages postés 20 Date d'inscription jeudi 20 mars 2003 Statut Membre Dernière intervention 11 janvier 2006
4 déc. 2006 à 13:38
voici un générateur de sitemap prenant en compte les paramètres ainsi que les dernières spécifications (http://www.sitemaps.org/) :
http://www.outils-referencement.com/outils/sitemaps/generateur
rvw68 Messages postés 29 Date d'inscription jeudi 5 février 2004 Statut Membre Dernière intervention 24 janvier 2006 1
24 janv. 2006 à 21:51
Bonjour,
mon site en php utilise des arguments du genre : articles.php?lng=fr&pg=440 comment les répertorier ?
Bravo et merci.
hello6891 Messages postés 5 Date d'inscription jeudi 25 août 2005 Statut Membre Dernière intervention 29 septembre 2008
15 janv. 2006 à 14:08
Bravo !
Merci d'avoir créé ce script et d'y avoir passé autant de temps
yvan
hit7374 Messages postés 2 Date d'inscription lundi 6 décembre 2004 Statut Membre Dernière intervention 25 juillet 2005
25 juil. 2005 à 21:01
merci,
ça marche bien sur.
@+
Mumuri Messages postés 320 Date d'inscription mercredi 9 octobre 2002 Statut Membre Dernière intervention 6 avril 2008
25 juil. 2005 à 20:37
hit7374 Messages postés 2 Date d'inscription lundi 6 décembre 2004 Statut Membre Dernière intervention 25 juillet 2005
13 juil. 2005 à 09:28
salut,
super votre truc, je vais le tester.
question pourrait on l'utiliser pour un site qui n'a pas le php (les pauvres) en déporté en quelque sorte. après il n'y aurait plus qu'à placer par ftp le fichier généré.
de mon coté j'ai écris un petit bout de code tout simple pour le sitemap de sites dynamiques, il s'inspire d'idées émises sur un forum (je remercie celui qui l'a posée).
le principe : on place 2 lignes en tête de page dynamique qui allimentent une table, puis une requête qui régulièrment reprend cette table et génére le fichier xml. ce sont donc les visiteurs qui allimentent la table uniquement avec les pages taggées.
vu la qualité de vos commentaires et corrections j'aimerais vous le passer pour des améliorations certaines.sinon il est sur comscripts à la rubrique divers.
amicalement à tous
cs_j2p Messages postés 3 Date d'inscription vendredi 14 juin 2002 Statut Membre Dernière intervention 7 juillet 2005
7 juil. 2005 à 09:52
Ma modeste contribution...

1) Pour la compatibilité avec PHP5
Remplacer la ligne suivante:
$files=array_merge($files,GetDirContents($dir.'/'.$file));
Par celle-ci:
$files=array_merge((array)$files,(array)GetDirContents($dir.'/'.$file));

En effet en PHP5, array_merge n'accepte que les tableau duement déclarés.

2) Pour une meilleure visualisation dans les éditeurs type Dreamweaver
Remplacer toutes les ocurrences suivantes:
'<?xml version="1.0" encoding="UTF-8"?>'
Par ceci:
html_entity_decode('<?xml version="1.0" encoding="UTF-8"?>')

Ceci pour éviter que l'éditeur n'interprette le ?> comme une fin de script PHP.


En espérant avoir été utile,

Jean-Pierre
cs_j2p Messages postés 3 Date d'inscription vendredi 14 juin 2002 Statut Membre Dernière intervention 7 juillet 2005
6 juil. 2005 à 16:30
Bonjour et bravo,

Un bémol cependant, ça ne marche pas avec php5...

C'est la ligne :
$files=array_merge($files,GetDirContents($dir.'/'.$file));
qui semble poser problème.

A suivre...
romain2boss Messages postés 16 Date d'inscription vendredi 23 mai 2003 Statut Membre Dernière intervention 9 août 2005
30 juin 2005 à 20:57
Bravo pour le code !!

Un seul bémol : quand on a un site dynamique avec des variables partout dans les url, ca restreint sacrement le nombre de pages ...

Mais bon, on ne peut pas tout avoir ...
cs_defrancesco Messages postés 16 Date d'inscription dimanche 19 novembre 2000 Statut Membre Dernière intervention 20 juin 2005
20 juin 2005 à 13:16
Bonjour,
Je ne suis qu'un petit amateur.
Très intéressé par votre code, j'ai essayé de l'installer.
Malheureusement, j'ai un message d'erreur:
Un caractère incorrect a été trouvé dans un contenu de texte. Erreur de traitement de la ressource http://www.chriproductio...

<title>G

Peut-on m'aider.
Merci d'avance.
Christian
Mumuri Messages postés 320 Date d'inscription mercredi 9 octobre 2002 Statut Membre Dernière intervention 6 avril 2008
17 juin 2005 à 21:13
ok j'ai modifié, perso je ne suis pas sur de utf-encode peut etre qu'il faudré faire des tests plus poussé
ImmortalPC Messages postés 954 Date d'inscription mardi 11 mai 2004 Statut Membre Dernière intervention 11 novembre 2008 2
17 juin 2005 à 19:10
Re,
j'ai XHTMLisé et CSSisé le tout
et enlevé des fautes (;)
Et enlevé les echo en trop et remplacé les . dans les echo par des ,

<!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" />
<meta name="generator" content="HAPedit 3.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>

Générateur de sitemap en xml

Copyright Top flood

Contributeurs :

Kloh : TimeSplitters' Games; ImmortalPC :[immortalpc.free.fr Immortal-PC]



Listages des urls autorisés pour le sitemap


<?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('includes','modules','sessions','images','pnadodb','webanalyse','_flood','javascript','language','parameters','smileys','themes','_streifer');
$FichiersInterdits = array('config.php','config_i.php','streifer_forum.gif.php','xmlrpc.php','referer.php','config-old.php','test.php','admin.php','image.php','header.php','footer.php','error.php','confige.php','banners.php','pntables.php','print.php','mainfile.php','modules.php','backend.php');

$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 ' ',$dir,' /',htmlentities($file),'
',"\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 ''.$nbliens.' liens référencés dans les fichiers.
',"\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 'Génération des fichiers sitemapXX.xml...
',"\r\n";
}else {
$numfichier='';
echo 'Génération du fichier sitemap.xml...
',"\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,''."\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,' '."\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,'0.5

');
$CurLiens ++;
}
$write($fp, '');
$close($fp);
echo '[./sitemap'.$numfichier.'.xml'.$GZ.' fichier sitemap'.$numfichier.'.xml'.$GZ.']
',"\r\n";
}else{

echo 'sitemap'.$numfichier.'.xml',"\r\n"
,'

<textarea rows="30" cols="100">',"\r\n"
,'<?xml version="1.0" encoding="UTF-8"?>',"\r\n";
?>

<?php
foreach($myfiles as $file){
?>

<loc><?php echo $file['lien']; ?></loc>
<lastmod><?php echo $file['date']; ?></lastmod>
<changefreq>monthly</changefreq>
0.5



<?php
}
?>
</textarea>


<?php
}
$numfichier++;
}

if ($numfichier!=1)
{
echo 'Génération du fichier sitemap index file.xml...
';
// 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 '[./sitemap.xml fichier sitemap.xml]
',"\r\n";

} else
{
echo '

<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";

}
}
?>
génération du sitemap terminé
Haut de la page




</html>

@+
ImmortalPC Messages postés 954 Date d'inscription mardi 11 mai 2004 Statut Membre Dernière intervention 11 novembre 2008 2
17 juin 2005 à 18:07
Re,
Nikel voilà ce que ça donne :
Donc mets pour le xml utf8_encode($file['lien'])
Et pour l'affichage des fichiers scannés htmlentities($file)
@+
Mumuri Messages postés 320 Date d'inscription mercredi 9 octobre 2002 Statut Membre Dernière intervention 6 avril 2008
17 juin 2005 à 13:55
Mumuri Messages postés 320 Date d'inscription mercredi 9 octobre 2002 Statut Membre Dernière intervention 6 avril 2008
17 juin 2005 à 13:07
il faut donc rajouter une fonction de filtrage pour avoir class%C3%A9 .php
ca doit exister en tout fait çà;)
ImmortalPC Messages postés 954 Date d'inscription mardi 11 mai 2004 Statut Membre Dernière intervention 11 novembre 2008 2
17 juin 2005 à 12:04
non
s'était un exemple comme un autre.
exemple : classé.php
et là il ya bug xml.
@+
Mumuri Messages postés 320 Date d'inscription mercredi 9 octobre 2002 Statut Membre Dernière intervention 6 avril 2008
17 juin 2005 à 11:35
merci j'édite çà
une petite question

pour le fichier classé, est un fichier spécifique à bannir automatiquement ( à ce moment là, il suffit de le rajouté dans les fichiers interdits)
est ce que c'est plutot un probléme liée au extensions, a ce moment la il suffit d'interdire les fichiers sans extension.
ImmortalPC Messages postés 954 Date d'inscription mardi 11 mai 2004 Statut Membre Dernière intervention 11 novembre 2008 2
17 juin 2005 à 11:18
Re,
en regardant bien le code j'ai trouvé d'autres érreur :
<?='toto'?>
Pas bien du tout ça éxiste mais utilise ça que sur ton serveur.

LE XHTML !!!!!!

et si un fichier est nommé: classé
ça mettra classé dans le xml et ça fait une érreur.

Pour la dernière érreur je sais pas comment faire mais pour le reste c'est réglé :

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html><head>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
<meta name="generator" content="HAPedit 3.1">
<title>Générateur de fichier sitemap</title>
</head>

Génération du fichier sitemap.xml...


<center>Copyright [./sitemap.xml fichiers sitemap.xml]
';
}else{

echo '

<textarea rows="30" cols="100">';
,'<?xml version="1.0" encoding="UTF-8"?>',"\r\n";
?>

<?php
foreach($myfiles as $file){
?>

<loc><?php echo $file['lien']; ?></loc>
<lastmod><?php echo $file['date']; ?></lastmod>
<changefreq>monthly</changefreq>
0.5



<?php
}
?>
</textarea>


<?php
}
?>
génération du sitemap terminé


</html>

@+
ImmortalPC Messages postés 954 Date d'inscription mardi 11 mai 2004 Statut Membre Dernière intervention 11 novembre 2008 2
17 juin 2005 à 10:56
Salut,
Super bien pensée !!!
3 trucs pour l'améliorer :
1) mets $racine= 'http://'.$_SERVER['HTTP_HOST'];
Pas besoin de paramétrer comme ça
2) utilise les ' et pas les "
3) <? deviens <?php

9/10
@+
Rejoignez-nous