php怎么生成sitemap.xml

 我来答
迷花石
2016-08-02 · 超过49用户采纳过TA的回答
知道小有建树答主
回答量:117
采纳率:0%
帮助的人:89.1万
展开全部
/**
 * 生成站点地图
 */
class sitemap{
    private $sitemapFile = array();
    private $oldxml      = null;
    private $newxml      = null;
    public $error        = null;
    public function __construct($sitemapFile) {
        $this->sitemapFile = $sitemapFile;
        if(is_file($this->sitemapFile)) {
            $data = file_get_contents($this->sitemapFile);
            if($data) {
                $this->oldxml = new SimpleXMLElement($data);
            }else{
                $this->error = '读取站点地图文件失败';
            }
        }else{
            $this->oldxml = $this->createEmptySitemap();
        }
        $this->newxml = $this->createEmptySitemap();
    }
    public function createEmptySitemap() {
        $str = '<?xml version="1.0" encoding="UTF-8"?>';
        $str .= '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9        http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd"> </urlset>';
        return new SimpleXMLElement($str);
    }
    public function addChilds($urlArr) {
        $urlArr = (array) $urlArr;
        foreach($urlArr as $url) {
            $priority = 0.5;
            $lastmod = date('Y-m-d');
            $changefreq = 'weekly';
            if(stripos($url,'.html')) {
                $priority = 1;
                $changefreq = 'monthly';
            }
            if($oldXmlUrl = $this->findOldXmlUrl($url)) {
                $priority = $oldXmlUrl->priority;
                $lastmod = $oldXmlUrl->lastmod;
                $changefreq = $oldXmlUrl->changefreq;
            }
            $rating = $this->newxml->addChild('url');
            $rating->addChild('loc',$url);
            $rating->addChild('priority',$priority);
            $rating->addChild('lastmod',$lastmod);
            $rating->addChild('changefreq',$changefreq);
        }
    }
    public function findOldXmlUrl($url) {
        $oldXmlUrl = '';
        foreach($this->oldxml->url as $key=>$xmlUrl) {
            if($xmlUrl->loc == $url) {
                $oldXmlUrl = $xmlUrl;
                unset($this->oldxml->url[$key]);
                break;
            }
        }
        return $oldXmlUrl;
    }
    public function save() {
        $data = $this->newxml->asXML();
        if(file_put_contents($this->sitemapFile,$data) === false) {
            $this->error = '写入站点地图数据失败';
            return false;
        }
        return true;
    }
}

上面这个是我个人博客生成站点地图用的类。

客户端调用代码如下:

$sitemapFile = 'Sitemap.xml';
$sitemap = new sitemap($sitemapFile);

if($sitemap->error) {
    die($sitemap->error);
}

$newUrl = [
    'http://www.kiscms.com/content/28.html'
];

$sitemap->addChilds();

if(!$sitemap->save()) {
    die($sitemap->error);
}

关键的问题是,你如何得到整站的url呢?

我个人博客的解决方法是写了个蜘蛛程序爬出来的。

匿名用户
推荐于2018-05-06
展开全部

Sitemap 可方便网站管理员通知搜索引擎他们网站上有哪些可供抓取的网页。最简单的 Sitemap 形式,就是XML 文件,在其中列出网站中的网址以及关于每个网址的其他元数据(上次更新的时间、更改的频率以及相对于网站上其他网址的重要程度为何等),以便搜索引擎可以更加智能地抓取网站。

当php提交的时候,对应事件代码如下:

$xml="sitemap.xml";
$sitemap='<?xml version="1.0" encoding="UTF-8"?>
<urlset><url>
    <loc>这里是网址比如(3tii.com)</loc>
    <lastmod>'.date("Y-m-d",time()).'</lastmod>
    <changefreq>always</changefreq>
    <priority>1.0</priority>
</url>
</urlset>';
$fpxml=fopen($xml,"w+");
fwrite($fpxml,$sitemap);
fclose($fpxml);

sitemap.xml是你对应的文件,如果路径不同,前面可能需要加"../"之类的,priority
改为0.8好些。

本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式