PHP生成Sitemap.xml网站地图文件的实现原理及代码
公司又上线了一个新的网站项目,我把生成sitemap.xml文件的工作交给了该项目的负责人,但是他之前并没有做过,所以就去百度上搜索别人的经验。
尝试了很多百度上别人分享出来的解决方案,比如使用sitemap在线生成工具的方式,手动拼装sitemap的方式,整站链接采集的方式,利用simpleXML类生成的方式,甚至还尝试了使用JS生成的方式,但是这些百度排名靠前的解决方案却并不是靠谱的解决方案,大多数都是一些鸡肋文章,没什么实用价值,实操性很差。
最后他为了快速解决这个工作任务,在快下班的时候跑去我的博客上也找了一遍,发现我也没有发布这方面的文章,于是就建议我写一篇文章发布到博客中,嗯~~~好像挺有道理!
下面就给大家具体介绍一下如何用PHP生成XML格式的Sitemap网站地图文件并实现自动化管理,这是目前为止我认为最佳的解决方案(中小站点)。
一,PHP生成Sitemap.xml网站地图文件的实现原理。
原理其实很简单,就是字符串的拼装。先准备好文件中需要包含的网页链接地址,然后根据xml规范格式对这些地址进行拼装,最后使用file_put_contents()函数将文件输出到网站根目录。
二,PHP生成Sitemap.xml的具体案例及实现代码。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
public function xmlmap() { $xml = '<?xml version="1.0" encoding="UTF-8"?>' .PHP_EOL; $xml .= '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">' .PHP_EOL; $xml .= '<url>' .PHP_EOL; $xml .= '<loc>https://www.hubaye.com</loc>' .PHP_EOL;//网站首页地址 $xml .= '<lastmod>' . date ( 'Y-m-d' ). '</lastmod>' .PHP_EOL; $xml .= '<changefreq>always</changefreq>' .PHP_EOL; $xml .= '<priority>1.0</priority>' .PHP_EOL; $xml .= '</url>' .PHP_EOL; $essay_type_cache = cache( 'essay_type' ); //从缓存中获取文章类别数据 foreach ( $essay_type_cache as $v ) { $xml .= '<url>' .PHP_EOL; $xml .= '<loc>https://www.hubaye.com/' . $v [ 'route_tag' ]. '/</loc>' .PHP_EOL;//拼接文章列表页链接地址 $xml .= '<lastmod>' . date ( 'Y-m-d' ). '</lastmod>' .PHP_EOL; $xml .= '<changefreq>always</changefreq>' .PHP_EOL; $xml .= '<priority>0.9</priority>' .PHP_EOL; $xml .= '</url>' .PHP_EOL; } $essay_list = db( 'essay' )->where( 'display' , 1)->field( 'id,type,create_time' )->order( 'create_time desc' )->select(); //获取数据库所有能展示的文章数据 foreach ( $essay_list as $v ) { $xml .= '<url>' .PHP_EOL; $xml .= '<loc>https://www.hubaye.com/' . $essay_type_cache [ $v [ 'type' ]][ 'route_tag' ]. '/post/' . $v [ 'id' ]. '.html</loc>' .PHP_EOL;//拼接文章链接地址 $xml .= '<lastmod>' .dgmDate( $v [ 'create_time' ], 'Y-m-d' ). '</lastmod>' .PHP_EOL; $xml .= '<changefreq>daily</changefreq>' .PHP_EOL; $xml .= '<priority>0.8</priority>' .PHP_EOL; $xml .= '</url>' .PHP_EOL; } $xml .= '</urlset>' ; file_put_contents ( "./xmlmap.xml" , $xml ); //输出xmlmap文件到网站根目录 } |
三,如何自动化管理Sitemap.xml网站地图文件?
我们使用上面的PHP代码成功生成sitemap文件以后是不是就完事了?其实并没有,因为Sitemap.xml文件是需要实时更新或者每天更新的,所以我们应该想一种自动化管理sitemap文件的解决方案。
我这边目前采用的缓存更新的方式,就是每次网站更新缓存的时候会同时更新sitemap文件,从而达到自动化管理的目的。
当然还有一种常用的解决方案是编写一个定时任务,每天固定时间去访问生成Sitemap的方法,从而实现自动化管理的目的。