php生成百度sitemap站点地图类函数的方法

介绍

本篇内容介绍了“php生成百度sitemap站点地图类函数的方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

本文实例讲述了php生成百度sitemap站点地图类函数的方法,分享给大家供大家参考。具体实现方法如下:

问题概述:

公司网站是问答百科的网站,搜索引擎优化工程师提出需求说根据网站的问题来生成xml文件。每个xml文件包含5000条setmap格式数据。现在线上网站大约有70 w条问题,所以说基本生成140个xml文件。还有一个索引文件。比如文件的名称以数字开头的。索引文件包含的内容就是每个xml文件的路径还有名称。
为什么要每个文件存储5000条数据呢,因为这是mysql的一个界限值,如果每次取多了以后可能会对线上用户访问造成影响,或者速度变慢。每个文件存储5000条数据,但是mysql selsect的时候不能每次取5000条,现在写的是每次取1000条。那这样逻辑就有点复杂。

实现方法:

首先取出1000条数据(可以灵活些成活的,方便以后修改),然后循环生成xml格式文件.file_puts_contens写入文件。然后再把生成的xml文件名称,取出问题的最小id,取出问题的最大id,取出问题的条数写出一个索引查询的三文件当中,格式大概是这个样子的。
0, 3146886, 3145887, 1000
发现最后面的条数是1000了吗,第一次选择取出1000条数据,然后写入0. xml文件当中。把取出的xml文件名称,最小id、最大id、条数写入到索引查询txt中。第一次写入了1000条数据到0。xml,生成条数为1000人。第二次查询的时候选择语句会成为id在哪里;取出的最大id(当前mysql为正序查询,如果为倒序,改成小于)限制1000这样的话又取出1000年,然后修改索引查询txt的最小id、最大id、生成条数加到2000。以此类推等生成条数到5000了的时候再另起一行写入索引文件,类似这样
0, 3146886, 3145887, 5000
1, 3148886, 3147887, 1000
这样写的话就减轻了服务器的压力。
下面贴出实现代码(风格有点乱):

具体功能代码如下:

代码如下:

& lt; ? php
/*
, *站点地图接口类
, */
,
类SitemapAction扩展行动{
私有静态$ baseURL=& # 39; & # 39;;//URL地址
私有静态$ askMobileUrl=& # 39; http://m.xxx.cn/ask/& # 39;;//问答移动版地址
私有静态askPcUrl=懊涝?http://www.xxx.cn/ask/",,,//问答pc地址
私有静态askZonePcUrl=懊涝?http://www.xxx.cn/ask/jingxuan/";//问答精选电脑链接
私有静态askZoneMobileUrl=懊涝?http://m.xxx.cn/ask/jx/";//问答精选移动版链接
,,,,,,,//问答setmaps
公共职能askSetMap () {
头(& # 39;- type: text/html; charset=utf - 8 # 39;);
//获取问题列表
$ maxid=0;,,,//索引文件最大id
$ minid=0;,,,//索引文件最小id
psize=1000美元;//数据库每次取数量
maxXml=5000美元;//xml写入记录数量
在美元=()数组;
//读取索引文件
美元指数=APP_PATH强生# 39;setmapxml/Index.txt& # 39;;
//关联setmaps路径
$ askXml=? ./siteditu/要求/ask.xml";
如果(! file_exists(美元指数)){
$ fp=fopen (“index"美元;,“w +“);
如果(! is_writable(美元指数)){
死亡(“文件:“美元指数。“不可写,请检查!“);
}
文件关闭(fp);其他
} {
//索引。txt文件说明0:xml文件名称(从1开始),1:文件最大id, 2:文件最小id, 3:文件当前记录数
$ fp=文件(美元指数);
字符串=fp美元[count (fp)美元1];//显示最后一行
arr=美元爆炸(& # 39;& # 39;美元字符串),
}
//索引文件数量是否小于美元maxXml
//如果为第一次运行
如果(! $ arr [1]) {
b=1美元;
$ filename=0;
} {
如果(arr美元,,arr [3] & lt; maxXml美元){
文件名=arr[0]美元;
$ psize=maxXml - arr[3]美元祝辞psize美元? psize:美元(maxXml - arr[3]美元);
$ b=0;
}其他{
文件名=arr[0] + 1美元;
b=1美元;
}
}
$ maxid=空(arr[1]美元)? 0:arr[1]美元;
$ minid=空(arr[2]美元)? 0:arr[2]美元;
回声“文件名称:“。美元文件名!”.xml" !”& lt; br/祝辞;“
回声“最大id:“。maxid美元霸主地位;& lt; br/祝辞;“
回声“最小id:“。minid美元霸主地位;& lt; br/祝辞;“
回声“xml写入最大记录:“。maxXml美元霸主地位;& lt; br/祝辞;“
回声“数据库每次读取数量:“。psize美元霸主地位;& lt; br/祝辞;“
$列表=self:: $ questionObj→getQuestionSetMap ($, $ maxid, psize美元);
如果(count ($) & lt;=0) {
回声1;退出;
}
记录=arr[3] +数美元($列表);//索引文件写入记录数

php生成百度sitemap站点地图类函数的方法