setDomain($domain); } /** * 设置网站地图根域名,开头用 http:// or https://, 结尾不要反斜杠/ * @param string $domain : 网站地图根域名
例如: http://mimvp.com */ public function setDomain($domain) { if (substr($domain, -1) == "/") { $domain = substr($domain, 0, strlen($domain) - 1); } $this->domain = $domain; return $this; } // 返回网站根域名 private function getDomain() { return $this->domain; } // 设置网站地图的xml文件名 public function setXmlFile($xmlFile) { $base = basename($xmlFile); $dir = dirname($xmlFile); if (!is_dir($dir)) { $res = mkdir(iconv("UTF-8", "GBK", $dir), 0777, true); if ($res) { echo "mkdir $dir success"; } else { echo "mkdir $dir fail."; } } $this->xmlFile = $xmlFile; return $this; } // 返回网站地图的xml文件名 private function getXmlFile() { return $this->xmlFile; } public function setIsChemaMore($isSchemaMore) { $this->isSchemaMore = $isSchemaMore; } private function getIsSchemaMore() { return $this->isSchemaMore; } // 设置XMLWriter对象 private function setWriter(\XMLWriter $writer) { $this->writer = $writer; } // 返回XMLWriter对象 private function getWriter() { return $this->writer; } // 返回网站地图的当前item private function getCurrentItem() { return $this->current_item; } // 设置网站地图的item个数加1 private function incCurrentItem() { $this->current_item = $this->current_item + 1; } // 返回当前网站地图(默认50000个item则新建一个网站地图) private function getCurrentSitemap() { return $this->current_sitemap; } // 设置网站地图个数加1 private function incCurrentSitemap() { $this->current_sitemap = $this->current_sitemap + 1; } private function getXMLFileFullPath() { $xmlfileFullPath = ""; if ($this->getCurrentSitemap()) { $xmlfileFullPath = $this->getXmlFile() . self::SITEMAP_SEPERATOR . $this->getCurrentSitemap() . self::SITEMAP_EXT; // 第n个网站地图xml文件名 + -n + 后缀.xml } else { $xmlfileFullPath = $this->getXmlFile() . self::SITEMAP_EXT; // 第一个网站地图xml文件名 + 后缀.xml } $this->setCurrXmlFileFullPath($xmlfileFullPath); // 保存当前xml文件全路径 return $xmlfileFullPath; } public function getCurrXmlFileFullPath() { return $this->currXmlFileFullPath; } private function setCurrXmlFileFullPath($currXmlFileFullPath) { $this->currXmlFileFullPath = $currXmlFileFullPath; } private function startSitemap() { $this->setWriter(new \XMLWriter()); $this->getWriter()->openURI($this->getXMLFileFullPath()); // 获取xml文件全路径 $this->getWriter()->startDocument('1.0', 'UTF-8'); $this->getWriter()->setIndentString("\t"); $this->getWriter()->setIndent(true); $this->getWriter()->startElement('urlset'); if ($this->getIsSchemaMore()) { $this->getWriter()->writeAttribute('xmlns:xsi', self::SCHEMA_XMLNS_XSI); $this->getWriter()->writeAttribute('xsi:schemaLocation', self::SCHEMA_XSI_SCHEMALOCATION); } $this->getWriter()->writeAttribute('xmlns', self::SCHEMA_XMLNS); } // 写入item元素,url、loc、priority字段必选,changefreq、lastmod可选 public function addItem($loc, $priority = self::DEFAULT_PRIORITY, $changefreq = NULL, $lastmod = NULL) { if (($this->getCurrentItem() % self::SITEMAP_ITEMS) == 0) { if ($this->getWriter() instanceof \XMLWriter) { $this->endSitemap(); } $this->startSitemap(); $this->incCurrentSitemap(); } $this->incCurrentItem(); $this->getWriter()->startElement('url'); $this->getWriter()->writeElement('loc', $loc); // 必选 $this->getWriter()->writeElement('priority', $priority); // 必选 if ($changefreq) { $this->getWriter()->writeElement('changefreq', $changefreq); // 可选 } if ($lastmod) { $this->getWriter()->writeElement('lastmod', $this->getLastModifiedDate($lastmod)); // 可选 } $this->getWriter()->endElement(); return $this; } // 转义时间格式,返回时间格式为 2021-09-12 private function getLastModifiedDate($date = null) { if (null == $date) { $date = time(); } if (ctype_digit($date)) { return date('Y-m-d', $date); // Y-m-d } else { $date = strtotime($date); return date('Y-m-d', $date); } } // 结束网站xml文档,配合开始xml文档使用 public function endSitemap() { if (!$this->getWriter()) { $this->startSitemap(); } $this->getWriter()->endElement(); $this->getWriter()->endDocument(); $this->getWriter()->flush(); } public function createSitemapIndex($loc, $lastmod = 'Today') { $indexwriter = new XMLWriter(); $indexwriter->openURI($this->getXmlFile() . self::SITEMAP_SEPERATOR . self::INDEX_SUFFIX . self::SITEMAP_EXT); $indexwriter->startDocument('1.0', 'UTF-8'); $indexwriter->setIndent(true); $indexwriter->startElement('sitemapindex'); $indexwriter->writeAttribute('xmlns:xsi', self::SCHEMA_XMLNS_XSI); $indexwriter->writeAttribute('xsi:schemaLocation', self::SCHEMA_XSI_SCHEMALOCATION); $indexwriter->writeAttribute('xmlns', self::SCHEMA_XMLNS); for ($index = 0; $index < $this->getCurrentSitemap(); $index++) { $indexwriter->startElement('sitemap'); $indexwriter->writeElement('loc', $loc . $this->getFilename() . ($index ? self::SITEMAP_SEPERATOR . $index : '') . self::SITEMAP_EXT); $indexwriter->writeElement('lastmod', $this->getLastModifiedDate($lastmod)); $indexwriter->endElement(); } $indexwriter->endElement(); $indexwriter->endDocument(); } }