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