最近接收到自动生成sitemap.xml的任务。首先在网络上搜集了一些资料查阅参考,发现都是东抄西凑的。如今整理一下实现方案和思路,欢迎更多的小伙伴提供更好的解决方案。 php生成xml文件主要是DOMDocument对象。具体能够看考一下官方文档:https://www.php.net/manual/zh/class.domdocument.php。 实现方案:生成sitemap.xml(命令行的方式)=>rync文件同步(linux定时执行脚本同步文件到目标文件目录下)
下面是部分实现逻辑代码,仅供参考:php
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); }