1. 论坛系统升级为Xenforo,欢迎大家测试!
    排除公告

自动生成符合GOOGLE要求的网站地图文件

本帖由 laogui2006-06-23 发布。版面名称:网站运营

  1. laogui

    laogui Administrator
    管理成员

    注册:
    2005-08-30
    帖子:
    15,216
    赞:
    35
    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="zh-CN" lang="zh-CN"><head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    <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>Google网站地图生成器</title>

    </head>
    <body id="top">
    <h2 class="center">自动生成符合GOOGLE要求的网站地图文件</h2>
    <p class="center">Copyright <a href="http://topflood.free.fr"  target="_blank" title="原作者站">Top flood</a><br />
    原作者 : <br />
    Kloh : <a href="http://timesplittersgames.free.fr"  target="_blank" title="作者1">TimeSplitters' Games</a>; ImmortalPC :<a href="http://immortalpc.free.fr"  target="_blank" title="作者2">Immortal-PC</a><br /><br />
    <pre>
    注:<br />
    1.请把本程序放入网站根目录执行<br />
    2.程序执行前请修改如下参数(或常量)以符合你网站要求:<br />
    LIMITLIENPARFICHIER
    LIMITLIENINDEXE
    $ExtensionsAutorises
    $DossiersInterdits
    $FichiersInterdits
    <br />
    3.程序将把列表写入多个xml文件(如果你网页比较多的话)<br />
    4.请在根目录下建立文件夹sitemap,并保证可写。sitemap(x).xml文件将写入这个目录<br />
    5.sitemap生成之后请至<a href="" title="submit sitemap">http://www.google.com/webmasters/sitemaps/</a> 提交给Google<br />
    </pre>
    </p>

    <h2>URL列表(将写入sitemap)中。。。</h2>

    <?php
    define
    ('LIMITLIENPARFICHIER',1000); //每个文件里最大URL数
    define('LIMITLIENINDEXE',50000); //最大URL数(总数)

    $racine'http://'.$_SERVER['HTTP_HOST'];
    $compressionGZ false;
    $Goption=0;
    $ExtensionsAutorises= array('php','php3','html','htm'); //将被写入SITEMAP的文件类型
    $DossiersInterdits = array('includes','modules','sessions','images','pnadodb','webanalyse','_flood','javascript','language','parameters','smileys','themes','_streifer'); //忽略的文件夹(不被列表,不被写入SITEMAP)
    $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');//忽略的文件(不被写入SITEMAP)

    $myfiles=GetDirContents('.');


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


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

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


    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:

                return (
    $DossierCourant == $Dossier);
            break;

            case 
    1:

                
    $pos strpos($mystring$findme);
                if (
    $pos === false) {
                    return 
    false;
                } else {
                    return 
    true;
                }
            break;

            case 
    2:

                return 
    ereg($Dossier,$DossierCourant);
            break;
        }
    }

    function 
    getextension($fichier){
        
    $bouts explode('.'$fichier);
        return 
    array_pop($bouts);
    }


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


                        
    $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.' 行网址将被写入sitemap文件.</span><br />',"\r\n";

    if (
    $nbliens>LIMITLIENPARFICHIER){
        
    // utilisation de la norme pour les sites souhaitant rfrencs plus de 1000 liens
        // un fichier sitemap à gnrer en plus
        
    $numfichier=1;
        echo 
    '<h2>分步生成文件 sitemapXX.xml...</h2>',"\r\n";
    }else {
        
    $numfichier='';
        echo 
    '<h2>sitemap.xml文件生成完毕...</h2>',"\r\n";
    }

    if (
    $compressionGZ)
    {
        
    $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/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;

            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>daily</changefreq>');
                
    $write($fp,'<priority>0.8</priority></url>');
                
    $CurLiens ++;
            }
            
    $write($fp'</urlset>');
            
    $close($fp);
            echo 
    '<a href="./sitemap/sitemap'.$numfichier.'.xml'.$GZ.'" target="_blank">生成文件 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>写入 sitemap 主文件...</h2>';

        if (
    $fp fopen('./sitemap/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/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/sitemap.xml" target="_blank">生成文件 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/sitemap',$k,'.xml</loc>',"\r\n"
            
    ,'<lastmod>',$date,'</lastmod>',"\r\n"
            
    ,'</sitemap>',"\r\n";
            }
            echo 
    '</sitemapindex>',"\r\n";

        }
    }
    ?>
    <span class="italic">全部生成完毕</span>
    <p class="center"><a href="#top" title="回到页面顶部">TOP</a></p>
    </body>

    </html>

     
  2. 365r

    365r New Member

    注册:
    2006-06-19
    帖子:
    3
    赞:
    0
    受用了
     
  3. 枫情绝舞

    枫情绝舞 New Member

    注册:
    2006-06-26
    帖子:
    2
    赞:
    0
    好东西呀!!!!!!
    谢谢老鬼!!!
     
  4. 我神经比较大_我不怕不怕不怕啦

    注册:
    2006-06-24
    帖子:
    76
    赞:
    1
    路过,友情顶贴一下.抢一个沙发.
     
  5. fanbing

    fanbing New Member

    注册:
    2006-06-27
    帖子:
    12
    赞:
    0
    [HIDE]事实上[/HIDE]
    、、、、、、、、、、、、、、、
     
  6. 总代

    总代 New Member

    注册:
    2005-11-10
    帖子:
    4,145
    赞:
    89
    如何屏蔽不需要的生存的目录?
     
  7. 小拨

    小拨 New Member

    注册:
    2006-07-06
    帖子:
    3
    赞:
    0
    楼住辛苦了
     
  8. 雪龙03

    雪龙03 New Member

    注册:
    2006-07-12
    帖子:
    29
    赞:
    0
    刚看到 还没有测试!支持!!~~
     
  9. arther

    arther New Member

    注册:
    2006-03-17
    帖子:
    23
    赞:
    0
    不错 很喜欢
     
  10. alistorm

    alistorm New Member

    注册:
    2006-05-29
    帖子:
    273
    赞:
    2
    我试试看,谢谢老鬼。
     
  11. alistorm

    alistorm New Member

    注册:
    2006-05-29
    帖子:
    273
    赞:
    2
    怎么用撒?教教菜鸟啦.
     
  12. alistorm

    alistorm New Member

    注册:
    2006-05-29
    帖子:
    273
    赞:
    2
    1.请把本程序放入网站根目录执行?怎么执行?把那个代码复制下来后用什么格式保存?
     
  13. by315com

    by315com New Member

    注册:
    2006-07-20
    帖子:
    10
    赞:
    0
    不错!谢谢!
     
  14. haiyanli

    haiyanli New Member

    注册:
    2006-04-18
    帖子:
    46
    赞:
    0
    我的总只能生成一行?
    好多这样的提示:
    Warning: array_merge() [function.array-merge]: Argument #2 is not an array in /***/****/****/read/map1.php on line 130
    ./default.html
     
  15. haiyanli

    haiyanli New Member

    注册:
    2006-04-18
    帖子:
    46
    赞:
    0
    我的文件执行总到大概4万多条(浏览器显示,而不是写入sitemap)的时候IE(火狐)就不动了,浏览器状态显示“完成”但没生成任何sitemap文件。不知道为什么?
     
  16. cnovo

    cnovo New Member

    注册:
    2005-09-09
    帖子:
    7
    赞:
    0
    非常好谢谢老鬼
     
  17. 摇摆

    摇摆 New Member

    注册:
    2007-12-19
    帖子:
    693
    赞:
    0
  18. ziting

    ziting New Member

    注册:
    2008-01-19
    帖子:
    4
    赞:
    0
    能说清楚点吗???想学习啊!
     
  19. guoke86

    guoke86 New Member

    注册:
    2006-04-11
    帖子:
    9
    赞:
    0
    到底提交又没又更好呢