PHP DOMDocument对象生成sitemap.xml的方式(前后端分离)

最近接收到自动生成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);    
}

你可能感兴趣的