php生成百度sitemap站点地图类函数实例__2.docx

上传人:PIYPING 文档编号:11614532 上传时间:2021-08-26 格式:DOCX 页数:13 大小:15.24KB
返回 下载 相关 举报
php生成百度sitemap站点地图类函数实例__2.docx_第1页
第1页 / 共13页
php生成百度sitemap站点地图类函数实例__2.docx_第2页
第2页 / 共13页
php生成百度sitemap站点地图类函数实例__2.docx_第3页
第3页 / 共13页
php生成百度sitemap站点地图类函数实例__2.docx_第4页
第4页 / 共13页
php生成百度sitemap站点地图类函数实例__2.docx_第5页
第5页 / 共13页
亲,该文档总共13页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《php生成百度sitemap站点地图类函数实例__2.docx》由会员分享,可在线阅读,更多相关《php生成百度sitemap站点地图类函数实例__2.docx(13页珍藏版)》请在三一文库上搜索。

1、php生成百度sitemap站点地图类函数实例_ 问题概述: 公司网站是问答百科的网站、seo工程师提出需求说依据网站的问题来生成xml文件。每个xml文件包含5000条setmap格式数据。现在线上网站大约有70w条问题,所以说基本生成140个xml文件。还有一个索引文件。比如文件的名称以数字开头的。索引文件包含的内容就是每个xml文件的路径还著名称。 为什么要每个文件存储5000条数据呢,由于这是mysql的一个界限值、假如每次取多了以后可能会对线上用户访问造成影响,或者速度变慢。每个文件存储5000条数据,但是mysql selsect的时候不能每次取5000条、现在写的是每次取1000

2、条。那这样规律就有点简单。 实现方法: 首先取出1000条数据(可以敏捷些成活的,便利以后修改),然后循环生成xml格式文件。file_puts_contens写入文件。然后再把生成的xml文件名称、取出问题的最小id、取出问题的最大id、取出问题的条数写出一个索引查询的txt文件当中,格式也许是这个样子的。 0,3146886,3145887,1000 发觉最终面的条数是1000了吗、第一次select取出1000条数据、然后写入0.xml文件当中。把取出的xml文件名称、最小id、最大id、条数写入到索引查询txt中。第一次写入了1000条数据到0.xml、生成条数为1000。其次次查询的

3、时候select语句会成为。 where id 取出的最大id(当前mysql为正序查询、假如为倒序、改成小于) limit 1000 这样的话又取出1000、然后修改索引查询txt的最小id、最大id、生成条数加到2021。以此类推等生成条数到了5000的时候再另起一行写入索引文件、类似这样 0,3146886,3145887,5000 1,3148886,3147887,1000 这样写的话就减轻了服务器的压力。 下面贴出实现代码(风格有点乱): 具体功能代码如下: 代码如下: ?php /* * SiteMap接口类 */ class SitemapAction extends Acti

4、on private static $baseURL = ; /URL地址 private static $askMobileUrl = l;charset=utf-8); /猎取问题列表 $maxid = 0; /索引文件最大id $minid = 0; /索引文件最小id $psize = 1000; /数据库每次取数量 $maxXml = 5000; /xml写入记录数量 $where = array(); /读取索引文件 $index = APP_PATH.setmapxml/Index.txt; /关联setmaps路径 $askXml = ./siteditu/ask/ask.xm

5、l; if(!file_exists($index) $fp=fopen($index, w+); if ( !is_writable($index) ) die(文件: .$index. 不行写,请检查!); fclose($fp); else /index.txt文件说明 0:xml文件名称(从1开头)、1:文件最大id、2:文件最小id、3:文件当前记录数 $fp = file($index); $string = $fpcount($fp)-1;/显示最终一行 $arr = explode(, $string); /索引文件数量是否小于$maxXml /假如为第一次运行 if(!$ar

6、r1) $bs=1; $filename=0; else if($arr $arr3$maxXml) $filename = $arr0; $psize = $maxXml-$arr3$psize?$psize:($maxXml-$arr3); $bs = 0; else $filename = $arr0+1; $bs=1; $maxid = empty($arr1)?0:$arr1; $minid = empty($arr2)?0:$arr2; echo 文件名称:.$filename.xml.br/ ; echo 最大id:.$maxid.br /; echo 最小id:.$minid.

7、br /; echo xml写入最大记录:.$maxXml.br /; echo 数据库每次读取数量:.$psize.br /; $list = self:$questionObj-getQuestionSetMap($where,$maxid,$psize); if(count($list)=0) echo 1;exit; $record = $arr3+count($list); /索引文件写入记录数 $indexArr = array(filename=$filename,maxid=$maxid,minid=$minid,maxXml=$record); $start = ?xml v

8、ersion=1.0 encoding=UTF-8 ? .chr(10); $start.=urlset xmlns= xmlns:mobile=); $start.=/urlset; foreach($list as $k=$qinfo) if($k=0) $indexArrminid=$qinfoid; $qinfolastmod = substr($qinfolasttime,0,10); $qinfomobielurl = self:$askMobileUrl.$qinfoid.html; /移动版链接 $qinfopcurl = self:$askPcUrl.$qinfoid.-p1

9、.html; /pc版链接 $xml.=$this-askMapMobileUrl($qinfo); /移动版 $xml.=$this-askMapPcUrl($qinfo); /pc版 $maxid = end($list); $indexArrmaxid = $maxidid; /更新索引文件 if($bs=0) /更新最终一行 $txt = file($index); $txtcount($txt)-1 = $indexArrfilename.,.$indexArrmaxid.,.$indexArrminid.,.$indexArrmaxXml.rn; $str = join($txt)

10、; if (is_writable($index) if (!$handle = fopen($index, w) echo 不能打开文件 $index;exit; exit; if (fwrite($handle, $str) = FALSE) echo 不能写入到文件 $index;exit; exit; echo 胜利地写入文件$index; fclose($handle); else echo 文件 $index 不行写;exit; fclose($index); elseif($bs=1) /新加入一行 $fp = fopen($index,a); $num = count($lis

11、t); $string = $indexArrfilename.,.$indexArrmaxid.,.$indexArrminid.,.$num.rn; if(fwrite($fp,$string)=false) echo 追加新行失败。;exit; else echo 追加胜利br /; /更新sitemap索引文件 $xmlData=?xml version=1.0 encoding=UTF-8 ?.chr(10); $xmlData.=sitemapindex.chr(10); $xmlData.=/sitemapindex; if(!file_exists($askXml) file_

12、put_contents($askXml,$xmlData); $fileList = file($askXml); $fileCount = count($fileList); $setmapxml = 正常问题链接 $txt = $this-setMapIndex($setmapxml); $fileList$fileCount-1=$txt./sitemapindex; $newContent = ; foreach($fileList as $v) $newContent.= $v; if(!file_put_contents($askXml,$newContent) exit(无法写

13、入数据); echo 已经写入文档 . $askXml; fclose($fp); $filename = APP_PATH.setmapxml/.$filename.xml; /更新到xml文件中,增加结尾 if(!file_exists($filename) file_put_contents($filename,$start); $xmlList = file($filename); $xmlCount = count($fileList); $xmlList$xmlCount-1=$xml./urlset; $newXml = ; foreach($xmlList as $v) $ne

14、wXml.= $v; if(!file_put_contents($filename, $newXml)exit(写入数据错误); else echo 写入数据胜利br /; /问答移动版xml private function askMapMobileUrl($data) $xml = ; if(is_array($data)!empty($data) $xml .=url.chr(10); if($dataid) $xml.=loc.$datamobielurl./loc.chr(10);/移动版链接 $xml.=mobile:mobile type=mobile/.chr(10); if

15、($datalastmod) $xml.=lastmod.$datalastmod./lastmod.chr(10); $xml.=changefreqdaily/changefreq.chr(10); $xml.=priority0.8/priority.chr(10); $xml.=/url.chr(10); return $xml; /问答pc版xml private function askMapPcUrl($data) $xml = ; if(is_array($data)!empty($data) $xml.=url.chr(10); if($dataid) $xml.=loc.$

16、datapcurl./loc.chr(10);/pc版链接 if($datalastmod) $xml.=lastmod.$datalastmod./lastmod.chr(10); $xml.=changefreqdaily/changefreq.chr(10); $xml.=priority0.8/priority.chr(10); $xml.=/url.chr(10); return $xml; /setmaps索引文件 private function setMapIndex($filename) $xml = ; $xml.=sitemap.chr(10); $xml.=loc$fi

17、lename/loc.chr(10); $xml.=lastmod.date(Y-m-d,time()./lastmod.chr(10); $xml.=/sitemap.chr(10); return $xml; ? xml索引文件格式如下: 代码如下: ?xml version=1.0 encoding=UTF-8 ? sitemapindex sitemap locl/loc mobile:mobile type=mobile/ lastmod2021-01-11/lastmod changefreqdaily/changefreq priority0.8/priority /url url /urlset 至于sql代码主要就是一个select语句,这里就不贴出来了。 更多信息请查看IT技术专栏 .

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 科普知识


经营许可证编号:宁ICP备18001539号-1