php怎么生成sitemap.xml
2个回答
展开全部
/**
* 生成站点地图
*/
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好些。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询