最近接收到自动生成sitemap.xml的任务。首先在网络上搜集了一些资料查阅参考,发现都是东抄西凑的。现在整理一下实现方案和思路,欢迎更多的小伙伴提供更好的解决方案。
php生成xml文件主要是DOMDocument对象。具体可以看考一下官方文档:https://www.php.net/manual/zh/class.domdocument.php。
实现方案:生成sitemap.xml(命令行的方式)=>rync文件同步(linux定时执行脚本同步文件到目标文件目录下)
下面是部分实现逻辑代码,仅供参考:
public function sitemap(array $thread, $url, $suffix, $filename = 'sitemap.xml')
{
// 创建一个DOMDocument对象
$dom = new \DOMDocument("1.0", "utf-8");
header("Content-Type: text/xml");
// 创建根节点
$root = $dom->createElement("urlset");
$root->setAttribute( "xmlns", "http://www.sitemaps.org/schemas/sitemap/0.9" );
$root->setAttribute( "xmlns:mobile", "http://www.baidu.com/schemas/sitemap-mobile/1/" );
$dom->appendChild($root);
foreach ($thread as $value) {
// 建立根下子节点track
$track = $dom->createElement("url");
$root->appendChild($track);
// 建立track节点下元素
$loc = $dom->createElement("loc");
$track->appendChild($loc);
$mobile = $dom->createElement("mobile:mobile");
$mobile->setAttribute("type","pc,mobile");
$track->appendChild($mobile);
$priority = $dom->createElement("priority");
$track->appendChild($priority);
$lastmod = $dom->createElement("lastmod");
$track->appendChild($lastmod);
$changefreq = $dom->createElement("changefreq");
$track->appendChild($changefreq);
// 赋值
$content = $url . $value['id'] . $suffix;
$text = $dom->createTextNode($content);
$loc->appendChild($text);
$date = date("Y-m-d H:i:s", strtotime($value['created_at']));
$text = $dom->createTextNode($date);
$lastmod->appendChild($text);
$text = $dom->createTextNode('daily');
$changefreq->appendChild($text);
$text = $dom->createTextNode(0.8);
$priority->appendChild($text);
}
//生成xml文件
$dom->save($filename);
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。