This code can be used directly, but there is one thing to note. If the website has too many articles, you need to modify some of the code. Baidu seems to stipulate the number of links in the sitemap. Too many and not very friendly
sitemap code
<?php
/*引用文件*/
require('e/class/connect.php');
require('e/class/db_sql.php');
require('e/data/dbcache/class.php');
/*建立数据库链接 与 实例化类*/
$link = db_connect();
$empire=new mysqlquery();
//header("Content-type:application/xml");
header("Content-type: text/html; charset=utf-8");
$operation = $_GET['operation'];
$current_url = explode('/',$_SERVER['PHP_SELF']);
$current_script_name = end($current_url);
if($operation && $operation == "makexml")
{
$xml = generate_sitemp_xml();
$result = save_xml('sitemap.xml',$xml);
if($result)
{
echo '生成成功,<a href="sitemap.xml">点此查看</a>';
}
else
{
echo '生成失败,<a href="'.$current_script_name.'">在来一次</a>!';
}
}
else
{
echo '欢迎使用红穆Sitemap生成工具,请<a href="'.$current_script_name.'?operation=makexml">点此生成</a>!';
}
//保存到文件
function save_xml($filename, $text) {
if (!$filename || !$text)
return false;
@chmod($filename,0777);
if ($fp = fopen($filename, "w")) {
if (@fwrite($fp, $text)) {
fclose($fp);
return true;
} else {
fclose($fp);
return false;
}
}
return false;
}
//生成Sitemap XML数据
function generate_sitemp_xml()
{
global $dbtbpre,$empire;
$xml = '';
$xml .= '<?xml version="1.0" encoding="utf-8"?>' .PHP_EOL;
$xml .= '<urlset>' .PHP_EOL;
$xml .= generate_home_xml();//首页
$xml .= generate_class_xml();//栏目
$query="select * from {$dbtbpre}ecms_news order by id desc limit 10000";
$sql=$empire->query($query);
while($r=$empire->fetch($sql))
{
$titleurl=sys_ReturnBqTitleLink($r);
$xml .= ' <url>' .PHP_EOL;
$xml .= ' <loc>'.$titleurl.'</loc>' .PHP_EOL;
$xml .= ' <lastmod>'.strftime('%Y-%m-%d',$r['newstime']).'</lastmod>' .PHP_EOL;
$xml .= ' <changefreq>daily</changefreq>' .PHP_EOL;
$xml .= ' <priority>0.8</priority>' .PHP_EOL;
$xml .= ' </url>' .PHP_EOL;
}
$xml .= '</urlset>' .PHP_EOL;
return $xml;
}
//生成栏目链接XML数据
function generate_class_xml()
{
global $dbtbpre,$empire,$class_r;
$xml = '';
$sql=$empire->query("SELECT * FROM {$dbtbpre}enewsclass WHERE islast=1");
while($r=$empire->fetch($sql))
{
$infor=$empire->fetch1("SELECT newstime FROM {$dbtbpre}ecms_".$class_r[$r[classid]][tbname]." WHERE classid='$r[classid]' ORDER BY newstime DESC LIMIT 1");
$class_url=sys_ReturnBqClassname($r, 9);
$xml .= ' <url>' .PHP_EOL;
$xml .= ' <loc>'.$class_url.'</loc>' .PHP_EOL;
$xml .= ' <lastmod>'.strftime('%Y-%m-%d',time()).'</lastmod>' .PHP_EOL;
$xml .= ' <changefreq>daily</changefreq>' .PHP_EOL;
$xml .= ' <priority>0.8</priority>' .PHP_EOL;
$xml .= ' </url>' .PHP_EOL;
}
return $xml;
}
//生成栏目链接XML数据
function generate_home_xml()
{
global $public_r;
$xml = '';
$xml .= ' <url>' .PHP_EOL;
$xml .= ' <loc>'.$public_r[newsurl].'</loc>' .PHP_EOL;
$xml .= ' <lastmod>'.strftime('%Y-%m-%d',time()).'</lastmod>' .PHP_EOL;
$xml .= ' <changefreq>daily</changefreq>' .PHP_EOL;
$xml .= ' <priority>0.8</priority>' .PHP_EOL;
$xml .= ' </url>' .PHP_EOL;
return $xml;
}
/*关闭数据库连接 与 释放类*/
db_close();
$empire=null;
?>