終於找到PHP的 Sitemap 產生器了,經過 iZO 精心調整後,傻瓜化了許多。
只要注意調整註解的部分即可。
如果是自己寫網站的朋友們,可以直接使用這個傻瓜sitemap.php,即可快速製作自己的Sitemap.xml唷 !
sitemap.php
<?php
$url = "https://izo.tw/"; //Site,後面請加斜線
$root_dir = 'web/public_html'; //目錄位置
$file_mask = '*.php'; //類型 *.html 或 *
$sitemap_file = 'sitemap.xml'; //生成檔案
$always_ignore = array('header.php','admin.php'); //忽略所有目錄的
//忽略檔案
$ignore_files = array(
'check.php','config.php','function.php','headerN.php','headerW.php','logout.php','sitemap.php','test.php','update.php','upuser.php'
);
//忽略目錄
$ignore_folders = array(
'admin','pic'
);
$starting_priority = $_POST['starting_priority'];
function generateSiteMap() {
global $url, $root_dir, $file_mask, $sitemap_file, $starting_priority;
global $always_ignore, $ignore_files, $ignore_folders;
global $total_file_count,$average, $lowest_priority_page, $lowest_priority;
chdir($root_dir);
$all_pages = getFiles('');
$xml_string = '<?xml version="1.0" encoding="UTF-8"?>
<urlset
xmlns="http://www.google.com/schemas/sitemap/0.84"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.google.com/schemas/sitemap/0.84
http://www.google.com/schemas/sitemap/0.84/sitemap.xsd">
<!-- created with iZO.tw -->
';
$modified_priority = array();
for ($i=30;$i>0;$i--) array_push($modified_priority,$i);
$lowest_priority = 100;
$lowest_priority_page = "";
foreach ($all_pages as $link) {
$handle = fopen($link,'r');
$info = fstat($handle);
fclose($handle);
$modified_at = date('Y-m-d\Th:i:s\Z',$info['mtime']);
$priority = $starting_priority;
if(preg_match('/index\.\w{3,4}$/',$link)) {
$link = preg_replace('/index\.\w{3,4}$/',"",$link);
$priority += 20;
}
//優先權管理
if(strpos($link,'view')) $priority -= 15;
if(strpos($link,'thing')) $priority -= 20;
if(strpos($link,'other')) $priority -= 25;
if(strpos($link,'other') !== false) $priority -= 25;
//資料夾深度
$depth = substr_count($link,'/');
if($depth < 1) $priority += 50;
if($depth > 2) $priority -= $depth * 1;
if($priority > 100) $priority = 100;
$loc = $url . $link;
if(substr($loc,-1,1) == '/') $loc = substr($loc,0,-1);
$total_priority += $priority;
if($lowest_priority > $priority) {
$lowest_priority = $priority;
$lowest_priority_page = $loc;
}
$priority = $priority / 100;
$xml_string .= " <url>
<loc>$loc</loc>
<priority>$priority</priority>
</url>\n";
}
$xml_string .= "</urlset>";
// <lastmod>$modified_at</lastmod> 時間標記
if(!$hndl = fopen($sitemap_file,'w')) {
print "不能開啟 sitemap file - '$sitemap_file'.\nDumping result to screen...\n<br /><br /><br />\n\n\n";
print '<textarea rows="25" cols="70" style="width:100%">'.$xml_string.'</textarea>';
} else {
print '<p><strong>Sitemap: <a href="' . $url.$sitemap_file .'">'. $url.$sitemap_file .'</a></strong></p>';
fputs($hndl,$xml_string);
fclose($hndl);
}
$total_file_count = count($all_pages);
}
function getFiles($cd) {
$links = array();
$directory = ($cd) ? $cd . '/' : '';
$files = glob($directory . $GLOBALS['file_mask']);
foreach($files as $link) {
if(in_array($link,$GLOBALS['ignore_files'])) continue;
if(in_array(basename($link),$GLOBALS['always_ignore'])) continue;
array_push($links, $link);
}
$folders = glob($directory . '*',GLOB_ONLYDIR);
foreach($folders as $dir) {
$name = basename($dir);
if(in_array($name,$GLOBALS['always_ignore'])) continue;
if(in_array($dir,$GLOBALS['ignore_folders'])) continue;
$more_pages = getFiles($dir);
if(count($more_pages)) $links = array_merge($links,$more_pages);
}
return $links;
}
?>
<!DOCTYPE html>
<html>
<head>
<title>Sitemap - auto make with iZO.TW</title>
<style type="text/css">
a{color:blue;text-decoration:none;}
a:hover{color:red;}
</style>
</head>
<body>
<?php
if($_POST['action'] == 'Create Sitemap') {
generateSiteMap();
echo "<p>找到".$total_file_count."頁面 </p> <a href='sitemap.php'>[返回]</a>";
} else { ?>
<h2>開始建立</h2>
<form action="" method="post">
Priority : <input type="text" name="starting_priority" size="3" value="70" />
<input type="submit" name="action" value="Create Sitemap" />
</form>
<?php } ?>
</body>
</html>
