⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sitemapper.php

📁 PHP4_0入门与提高源程序代码
💻 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>&nbsp; &nbsp; 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 + -