Código PHP:
<!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>Generador de Google sitemap.xml</title>
</head>
<body id="haut">
<h2 class="center">Generador de sitemap en xml</h2>
<br />
</a>
</p>
<h2>Listados de urls autorizadas para el sitemap</h2>
<?php
//set_time_limit(60*10); no utilizar si no es necesario (webs muy grandes) :Fija el tiempo para ejecutar el script en este caso 10 minutos (10*60 seconde)
define('LIMITLIENPARFICHIER',1000); // 1000 Lineas en el fichero
define('LIMITLIENINDEXE',50000); // 50 000 total de lineas urls
// GENERADOR DE FICHEROS SITEMAPS.XML PARA GOOGLE
// 1- editar archivos, carpetas y extensiones prohibidas y su modus operandi (0 por defecto) (sin /)
// 2- editar la variable $ compressionGZ de tener o no una compresión en sus archivos (válido sólo si tiene más de 1000 enlaces)
// 3- cargar el archivo a su cuenta y ejecutarse desde un navegador
/** NOTA:
Si tenemos
./image/
./image/verano
./image/invierno
si luego poner "imagen" en caso prohíbe todas las subcarpetas se prohibirán
si usted se pone "invierno" cuando el registro de invierno se prohibió
No "/ images / invierno"
*/
$racine= 'http://'.$_SERVER['HTTP_HOST'];
$compressionGZ = false; // false no comprime true comprime
$Goption=0;// Opcion de filtrado (Dejar a 0 solo se usa para casos puntuales)
// 0 - filtrado bit a bit (de la variable dossiercherche==dossierencour)
// 1 - presencia de una porción de la palabra en el expediente
// 2 - filtrado de las expresiones regulares
$ExtensionsAutorises= array('php','php3','html','htm','hrml','asp','jpg','gif');
$DossiersInterdits = array('includes','modules','sessions','images','pnadodb','webanalyse','_flood','javascript','language','parameters','smileys','themes','_streifer', 'admin', 'cgi-bin');
$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('.');
/**
<br />
Funcion Dossier_Autorisé
param : $DossierCourant
return : Verdadero si archivo falso autorice otra cosa
*/
function Dossier_Autorisé($DossierCourant){
global $DossiersInterdits;
return Est_Autorisé($DossierCourant, $DossiersInterdits);
}
/**
Funcion Dossier_Autorisé
param : $DossierCourant
return : Verdadero si archivo falso autorice otra cosa
*/
function Fichier_Autorisé($FichierCourant){
global $FichiersInterdits;
return Est_Autorisé($FichierCourant, $FichiersInterdits);
}
/**
Funcion Extension_Autorisé
*/
function Extension_Autorisé($ExtensionCourante){
global $ExtensionsAutorises;
return !Est_Autorisé($ExtensionCourante,$ExtensionsAutorises);
}
/**
puede alcanzar los dos anteriores
*/
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:
// compracion bit a bit
return ($DossierCourant == $Dossier);
break;
case 1:
// filtra con strpos
$pos = strpos($mystring, $findme);
if ($pos === false) {
return false;
} else {
return true;
}
break;
case 2:
// filtra con las expresiones regulares
return ereg($Dossier,$DossierCourant);
break;
}
}
/**
Funcion getextension : devuelve la extensión de un archivo
source : nexen.net
param : $fichier
return: extension del fichero
*/
function getextension($fichier){
$bouts = explode('.', $fichier);
return array_pop($bouts);
}
/**
Funcion GetDirContents
param : $dir carpeta raíz (la prueba es recursivo)
return : lista las 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);
// añadiendo la fecha
// codigo : 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.' enlaces referenciados en los archivos.</span><br />',"\r\n";
if ($nbliens>LIMITLIENPARFICHIER){
// Utilizando el estándar para los sitios que deseen referenciados más de 1000 enlaces
// mapa web de archivos para generar un mayor
$numfichier=1;
echo '<h2>Generados los ficheros sitemapXX.xml...</h2>',"\r\n";
}else {
$numfichier='';
echo '<h2>Generacion del fichero 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 es actual vínculo 20000 dice que llega a 21000 en PAUSA
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>weekly</changefreq>');
$write($fp,'<priority>0.5</priority></url>');
$CurLiens ++;
}
$write($fp, '</urlset>');
$close($fp);
echo '<a href="./sitemap'.$numfichier.'.xml'.$GZ.'" target="_blank">FICHERO 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>weekly</changefreq>'."\r\n";
echo '<priority>0.5</priority></url>'."\r\n";
$CurLiens ++;
}
echo '</urlset></textarea><br />';
}
$numfichier++;
}
if ($numfichier!=1)
{
echo '<h2>Generados los ficheros 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">FICHERO 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">Generación del sitemap terminado</span>
<p class="center"><a href="#haut" title="Volver a iniciar">Volver a Iniciar</a></p>
</body>
</html>