📄 sitemapper.php
字号:
<html>
<head>
<title> 创建网站地图的代码</title>
</head>
<body bgcolor="#FFFFFF" link="#6600CC" vlink="#6600CC" alink="#6600CC" text="#FFFFFF">
<font face="Arial,Helvetica" size="2" color="#1E90FF">
<?php
//返回HTTP请求啊、返回的头信息
function get_headers($host, $path = "/")
{
//建立与$host的80端口的连接
$fp = fsockopen ("$host", 80, &$errno, &$errstr) or die("Socket Open Error: $errno Reason: $errstr");
//发送HTTP请求
fputs($fp,"GET $path HTTP/1.0\n\n");
while (!$end) {
$line = fgets($fp, 2048); //取得HTTP请求的返回结果
if (trim($line) == "") $end = true; //如果已经取出了所有的返回内容,则$end为true.
printf("%s<br>\n",$line); //输出$line的结果
}
fclose($fp); //关闭连接
printf("<hr>\n");
}
//返回$url页面的内容
function get_url_page($url)
{
static $contents = "";
static $prev_url = "";
if ($url == $prev_url) return $contents;
$contents = @file($url); //返回$url的页面内容
if (empty($contents)) $contents = @file($url);
$prev_url = $url;
return $contents;
}
//输出从某一个页面返回的内容
function list_url_page($fcontents) {
while (list ($line_num, $line) = each ($fcontents)) {
printf("<b>Line %s:</b> %s <br>\n",$line_num,htmlspecialchars($line));
}
}
//返回页面中的所有链接
function url_page_links($fcontents) {
$contents = implode("", $fcontents); //把数组$fcontents的内容连成一个字符串
preg_match_all("|href=\"?([^\"' >]+)|i", $contents, $arrayoflinks); //查找链接信息并保存入数组
return $arrayoflinks; //返回数组
}
//根据$url和$link返回链接
function make_url($url,$link) {
global $host;
$purl = parse_url($url); //返回$url的相关信息
$path = $purl[path]; //取得路径信息
$u = "http://".$host;
if (!isset($path)) { //如果没有路径信息
//把$url和$link连起来
if (substr($link,0,1) == "/") $u .= $link;
else $u .= "/".$link;
return $u; //返回最后的url
}
//如果$path非空
$p = explode("/",$path); //把$path按照/分开存放到数组中
array_pop($p); //弹出数组的最后一个元素
array_shift($p); //弹出数组的最前面一个元素
$c = count($p); //返回$p中所包含的元素个数
$l = explode("/",$link); //把$link按照/分开并存放到数组$l中
$d = count($l); //返回数组$l中的元素个数
for($e=0;$e<$d;++$e) {
if ($l[$e] == "..") --$c; //如果$l的第一个元素为..,则$c减1
}
//向$url中添加路径
if ($c > 0) for($e=0;$e<$c;++$e) $u .= "/".$p[$e];
//把$link添加到$u中
if ($d == 0) { //如果$link中只包含一个部分
if (substr($link,0,1) == "/") $u .= $link;
else $u .= "/".$link;
return $u;
}
//如果$link中包含多个部分,逐个添加到$u中
for($e=0;$e<$d;++$e) {
if (substr($l[$e],0,1) == ".") continue;
$u .= "/".$l[$e];
}
return $u;
}
//对链接做出处理,如果是有效链接则以超级连接的形式显示,否则显示为无效链接
function parse_links($url,$links) {
//全局变量
global $host;
global $mp;
global $pages;
global $mpages;
while(list(,$link) = each($links[1])) {
if (substr($link,0,1) == "\\") continue;//如果$link以\\开头不做处理
if (substr($link,0,1) == "#") continue;//如果以#开头,不做处理
if (substr($link,0,4) == "http") {//如果$link以http开头,则以超级链接的形式返回
printf(" <a href=\"%s\">%s</a><br>\n",$link,$link);
continue;
}
if (substr($link,0,6) == "mailto") continue; //如果是mailto:,不做处理
if (substr($link,0,7) == "sitemap") continue;//如果是sitemap,不做处理
$nurl = make_url($url,$link); //调用make_url函数
//如果是htm,html或者php文件
if ((substr($nurl,-3) == "htm") ||
(substr($nurl,-4) == "html") ||
(substr($nurl,-3) == "php")) {
if (!check_link($nurl)) {//调用check_link函数
$p = get_url_page($nurl);//返回$nurl的内容
if (empty($p)) {//如果为空内容
$mpages[] = $nurl;
$mp += 1;
printf(" <a name=\"MPage%d\">%s</a><br>\n",$mp,$nurl);
printf(" |__Unable to retrieve this page ...<br>\n");//输出无法处理的信息
continue;
}
else $pages[] = $nurl;
}
}
printf(" <a href=\"%s\">%s</a><br>\n",$nurl,$nurl); //输出处理完毕的链接
}
}
//处理页面的内容
function index_page($url) {
//全局变量
global $host; //站点名
global $pc; //page count页面记数
global $list;
printf("<br><a name=\"Page%d\">%s</a><br>\n",$pc+1,$url);
printf("<a href=\"%s\">%s</a><br>\n",$url,$url);
$p = get_url_page($url); //调用get_url_page函数
if (empty($p)) { //如果返回空内容,输出错误信息
printf("|__Unable to retrieve this page ...<br>\n");
return 0;
}
if ($list) list_url_page($p); //如果$list为true,输出页面内容
$links = url_page_links($p); //调用url_page_links()
parse_links($url,$links); //处理链接
}
//检查链接
function check_link($entry) {
global $pages;
reset($pages);
while(list(,$link) = each($pages)) {
if($entry == $link) return 1;
}
return 0;
}
if (!isset($list)) $list = 0; //如果没有设定$list,则默认为0
if (!isset($url)) $url = "http://166.111.172.8/ebookhtml/ebook.html"; //默认的$url
if (!isset($headers)) $headers = 1; //默认的$headers值
if (substr($url,0,7) != "http://") { //如果$url不是以http://开头,则返回错误信息
printf("<br>Invalid URL. It must begin with http:// <br>\n");
exit();
}
$purl = parse_url($url); //返回$url的相关信息
$host = $purl[host];
printf("<center>Site Map: <a href=\"%s\">%s</a> IP: %s</center><br><hr>\n",$url,$url,gethostbyname($host));
$pages[] = $url; //把$url保存到$pages数组中
$mpages[] = "";
$mp = 0;
array_pop($mpages);
if ($headers) get_headers($host);
$pc = 0;
while(1) {
$url = $pages[$pc]; //逐个处理$pages中保存的$url
if(empty($url)) break; //如果$url为空则跳出循环
index_page($url); //调用index_page处理$url内容
flush(); //清空缓存中的内容
$pc += 1;
}
$pc = count($pages); //返回$pages中存储的$url的数目
printf("<br><br>.... %03d Pages Indexed ....<br><br>\n",$pc); //输出处理的页面的数目
reset($pages);
//输出处理的页面
$pc = 0;
while($pages[$pc]) {
$link = $pages[$pc];
printf("<a href=\"#Page%d\">%03d</a> <a href=\"%s\">%s</a><br>\n",$pc+1,$pc+1,$link,$link);
++$pc;
}
//输出不能处理的页面
$mp = count($mpages);
printf("<br><br>.... %03d Pages Missing [Broken Links] ....<br><br>\n",$mp);
reset($mpages);
$mp = 0;
while($mpages[$mp]) {
$link = $mpages[$mp];
printf("<a href=\"#MPage%d\">%03d</a> <a href=\"%s\">%s</a><br>\n",$mp+1,$mp+1,$link,$link);
++$mp;
}
?>
<br><br>
</font>
<font face="Arial,Helvetica" size="2" color="#B22222">
<hr>
<div align="right">
<address>
Created by PHP SiteMapper v1.1
</address>
</font>
</div>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -