php生成百度sitemap站点地图类函数实例_PHP
本文实例讲述了php生成百度sitemap站点地图类函数的方法,分享给大家供大家参考。具体实现方法如下:
问题概述:
公司网站是问答百科的网站、seo工程师提出需求说根据网站的问题来生成xml文件。每个xml文件包含5000条setmap格式数据。现在线上网站大约有70w条问题,所以说基本生成140个xml文件。还有一个索引文件。比如文件的名称以数字开头的。索引文件包含的内容就是每个xml文件的路径还有名称。
为什么要每个文件存储5000条数据呢,因为这是mysql的一个界限值、如果每次取多了以后可能会对线上用户访问造成影响,或者速度变慢。每个文件存储5000条数据,但是mysql selsect的时候不能每次取5000条、现在写的是每次取1000条。那这样逻辑就有点复杂。
实现方法:
首先取出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。第二次查询的时候select语句会成为。 where id > 取出的最大id(当前mysql为正序查询、如果为倒序、改成小于) limit 1000 这样的话又取出1000、然后修改索引查询txt的最小id、最大id、生成条数加到2000。以此类推等生成条数到了5000的时候再另起一行写入索引文件、类似这样
0,3146886,3145887,5000
1,3148886,3147887,1000
这样写的话就减轻了服务器的压力。
下面贴出实现代码(风格有点乱):
具体功能代码如下:
代码如下:
/*
* SiteMap接口类
*/
class SitemapAction extends Action{
private static $baseURL = ''; //URL地址
private static $askMobileUrl = 'http://m.xxx.cn/ask/'; //问答移动版地址
private static $askPcUrl = "http://www.xxx.cn/ask/"; //问答pc地址
private static $askZonePcUrl = "http://www.xxx.cn/ask/jingxuan/"; //问答精选Pc链接
private static $askZoneMobileUrl = "http://m.xxx.cn/ask/jx/"; //问答精选移动版链接
//问答setmaps
public function askSetMap(){
header('Content-type:text/html;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.xml";
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 = $fp[count($fp)-1];//显示最后一行
$arr = explode(',', $string);
}
//索引文件数量是否小于$maxXml
//如果为第一次运行
if(!$arr[1]){
$bs=1;
$filename=0;
}else{
if($arr && $arr[3]$filename = $arr[0];
$psize = $maxXml-$arr[3]>$psize?$psize:($maxXml-$arr[3]);
$bs = 0;
}else{
$filename = $arr[0]+1;
$bs=1;
}
}
$maxid = empty($arr[1])?0:$arr[1];
$minid = empty($arr[2])?0:$arr[2];
echo "文件名称:".$filename.".xml"."
";
echo "最大id:".$maxid."
";
echo "最小id:".$minid."
";
echo "xml写入最大记录:".$maxXml."
";
echo "数据库每次读取数量:".$psize."
";
$list = self::$questionObj->getQuestionSetMap($where,$maxid,$psize);
if(count($list)echo 1;exit;
}
$record = $arr[3]+count($list); //索引文件写入记录数
$indexArr = array('filename'=>$filename,'maxid'=>$maxid,'minid'=>$minid,'maxXml'=>$record);
$start = ' '.chr(10);
$start.="
$start.="
foreach($list as $k=>$qinfo){
if($k==0)
$indexArr['minid']=$qinfo['id'];
$qinfo['lastmod'] = substr($qinfo['lasttime'],0,10);
$qinfo['mobielurl'] = self::$askMobileUrl.$qinfo['id'].'.html'; //移动版链接
$qinfo['pcurl'] = self::$askPcUrl.$qinfo['id'].'-p1.html'; //pc版链接
$xml.=$this->askMapMobileUrl($qinfo); //移动版
$xml.=$this->askMapPcUrl($qinfo); //pc版
}
$maxid = end($list);
$indexArr['maxid'] = $maxid['id'];
//更新索引文件
if($bs==0){
//更新最后一行
$txt = file($index);
$txt[count($txt)-1] = $indexArr[filename].','.$indexArr[maxid].','.$indexArr['minid'].','.$indexArr['maxXml']."\r\n";
$str = join($txt);
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($list);
$string = $indexArr[filename].','.$indexArr[maxid].','.$indexArr['minid'].','.$num."\r\n";
if(fwrite($fp,$string)===false){
echo "追加新行失败。。。";exit;
}else{
echo "追加成功
";
//更新sitemap索引文件
$xmlData="".chr(10);
$xmlData.="
$xmlData.="
if(!file_exists($askXml))
file_put_contents($askXml,$xmlData);
$fileList = file($askXml);
$fileCount = count($fileList);
$setmapxml = "http://www.xxx.cn/ask/setmapxml/{$filename}.xml";//正常问题链接
$txt = $this->setMapIndex($setmapxml);
$fileList[$fileCount-1]=$txt."";
$newContent = '';
foreach($fileList as $v){
$newContent.= $v;
}
if(!file_put_contents($askXml,$newContent)) exit('无法写入数据');
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."";
$newXml = '';
foreach($xmlList as $v){
$newXml.= $v;
}
if(!file_put_contents($filename, $newXml))exit("写入数据错误");
else
echo "写入数据成功
";
}
//问答移动版xml
private function askMapMobileUrl($data){
$xml = '';
if(is_array($data)&&!empty($data)){
$xml .="
if($data['id'])
$xml.='
$xml.="
if($data['lastmod'])
$xml.='
$xml.='
$xml.='
$xml.="
return $xml;
}
}
//问答pc版xml
private function askMapPcUrl($data){
$xml = '';
if(is_array($data)&&!empty($data)){
$xml.='
if($data['id'])
$xml.='
if($data['lastmod'])
$xml.='
$xml.='
$xml.='
$xml.='
return $xml;
}
}
//setmaps索引文件
private function setMapIndex($filename){
$xml = '';
$xml.="
$xml.="
$xml.="
$xml.="
return $xml;
}
}
?>
xml索引文件格式如下:
代码如下:
xml文件格式(每个文件需要存储5000条、现展示1条例子)
代码如下:
至于sql代码主要就是一个select语句,这里就不贴出来了。
希望本文所述对大家的php程序设计有所帮助。

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

JWT est une norme ouverte basée sur JSON, utilisée pour transmettre en toute sécurité des informations entre les parties, principalement pour l'authentification de l'identité et l'échange d'informations. 1. JWT se compose de trois parties: en-tête, charge utile et signature. 2. Le principe de travail de JWT comprend trois étapes: la génération de JWT, la vérification de la charge utile JWT et l'analyse. 3. Lorsque vous utilisez JWT pour l'authentification en PHP, JWT peut être généré et vérifié, et les informations sur le rôle et l'autorisation des utilisateurs peuvent être incluses dans l'utilisation avancée. 4. Les erreurs courantes incluent une défaillance de vérification de signature, l'expiration des jetons et la charge utile surdimensionnée. Les compétences de débogage incluent l'utilisation des outils de débogage et de l'exploitation forestière. 5. L'optimisation des performances et les meilleures pratiques incluent l'utilisation des algorithmes de signature appropriés, la définition des périodes de validité raisonnablement,

Liaison statique (statique: :) implémente la liaison statique tardive (LSB) dans PHP, permettant à des classes d'appel d'être référencées dans des contextes statiques plutôt que de définir des classes. 1) Le processus d'analyse est effectué au moment de l'exécution, 2) Recherchez la classe d'appel dans la relation de succession, 3) il peut apporter des frais généraux de performance.

Quelles sont les méthodes magiques de PHP? Les méthodes magiques de PHP incluent: 1. \ _ \ _ Construct, utilisé pour initialiser les objets; 2. \ _ \ _ Destruct, utilisé pour nettoyer les ressources; 3. \ _ \ _ Appel, gérer les appels de méthode inexistants; 4. \ _ \ _ GET, Implémentez l'accès à l'attribut dynamique; 5. \ _ \ _ SET, Implémentez les paramètres d'attribut dynamique. Ces méthodes sont automatiquement appelées dans certaines situations, améliorant la flexibilité et l'efficacité du code.

Deepseek-R1 autorise la bibliothèque Baidu et NetDisk: L'intégration parfaite de la pensée et de l'action profondes s'est rapidement intégrée à de nombreuses plateformes en seulement un mois. Avec sa disposition stratégique audacieuse, Baidu intègre Deepseek en tant que partenaire modèle tiers et l'intégre dans son écosystème, qui marque un progrès majeur dans sa stratégie écologique de "Big Model Search". Baidu Search et Wenxin Intelligent Intelligent Platform sont les premiers à se connecter aux fonctions de recherche profonde des grands modèles Deepseek et Wenxin, offrant aux utilisateurs une expérience de recherche IA gratuite. Dans le même temps, le slogan classique de "Vous saurez quand vous allez à Baidu", et la nouvelle version de l'application Baidu intègre également les capacités du Big Model et Deepseek de Wenxin, lançant "AI Search" et "Wide Network Information Raffinement"

Dans PHP8, les expressions de correspondance sont une nouvelle structure de contrôle qui renvoie différents résultats en fonction de la valeur de l'expression. 1) Il est similaire à une instruction Switch, mais renvoie une valeur au lieu d'un bloc d'instruction d'exécution. 2) L'expression de correspondance est strictement comparée (===), ce qui améliore la sécurité. 3) Il évite les éventuelles omissions de rupture dans les instructions de commutation et améliore la simplicité et la lisibilité du code.

En PHP, vous pouvez prévenir efficacement les attaques du CSRF en utilisant des jetons imprévisibles. Les méthodes spécifiques comprennent: 1. Générer et intégrer les jetons CSRF dans la forme; 2. Vérifiez la validité du jeton lors du traitement de la demande.

PHP et Python ont chacun leurs propres avantages et choisissent en fonction des exigences du projet. 1.Php convient au développement Web, en particulier pour le développement rapide et la maintenance des sites Web. 2. Python convient à la science des données, à l'apprentissage automatique et à l'intelligence artificielle, avec syntaxe concise et adaptée aux débutants.

Les types stricts en PHP sont activés en ajoutant Declare (strict_types = 1); en haut du fichier. 1) Il force la vérification du type des paramètres de fonction et des valeurs de retour pour éviter la conversion de type implicite. 2) L'utilisation de types stricts peut améliorer la fiabilité et la prévisibilité du code, réduire les bogues et améliorer la maintenabilité et la lisibilité.
