分享

ecshop 蜘蛛爬行记录的实现

 帅哥不光头 2011-03-28

实现步骤:
1.添加数据库表

Sql代码  收藏代码
  1. -- --------------------------------------------------------  
  2.   
  3. -- 蜘蛛表的结构 `ecs_bot`  
  4.   
  5. --  
  6.   
  7. CREATE TABLE IF NOT EXISTS `ecs_bot` (  
  8.   
  9.   
  10.   `id` int(11) NOT NULL AUTO_INCREMENT,  
  11.   
  12.   
  13.   `url` varchar(255) DEFAULT NULL,  
  14.   
  15.   
  16.   `bot` varchar(20) DEFAULT NULL,  
  17.   
  18.   `timevarchar(30) DEFAULT NULL,  
  19.   
  20.   `ip` varchar(50) DEFAULT NULL,  
  21.   
  22.   PRIMARY KEY (`id`)  
  23.   
  24.   
  25. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;  

 2.修改lib_main.php里的is_spider()

Php代码  收藏代码
  1. /** 
  2.  * 判断是否为搜索引擎蜘蛛 
  3.  * 
  4.  * @access  public 
  5.  * @return  string 
  6.  */  
  7. function is_spider($record = true)  
  8. {  
  9.     static $spider = NULL;  
  10.   
  11.     if ($spider !== NULL)  
  12.     {  
  13.         return $spider;  
  14.     }  
  15.   
  16.     if (emptyempty($_SERVER['HTTP_USER_AGENT']))  
  17.     {  
  18.         $spider = '';  
  19.   
  20.         return '';  
  21.     }  
  22.   
  23.     $searchengine_bot = array(  
  24.         'googlebot',  
  25.         'mediapartners-google',  
  26.         'baiduspider+',  
  27.         'msnbot',  
  28.         'yodaobot',  
  29.         'yahoo! slurp;',  
  30.         'yahoo! slurp china;',  
  31.         'iaskspider',  
  32.         'sogou web spider',  
  33.         'sogou push spider'  
  34.     );  
  35.   
  36.     $searchengine_name = array(  
  37.         'GOOGLE',  
  38.         'GOOGLE ADSENSE',  
  39.         'BAIDU',  
  40.         'MSN',  
  41.         'YODAO',  
  42.         'YAHOO',  
  43.         'Yahoo China',  
  44.         'IASK',  
  45.         'SOGOU',  
  46.         'SOGOU'  
  47.     );  
  48.   
  49.     $spider = strtolower($_SERVER['HTTP_USER_AGENT']);  
  50.   
  51.     foreach ($searchengine_bot AS $key => $value)  
  52.     {  
  53.         if (strpos($spider$value) !== false)  
  54.         {  
  55.             $spider = $searchengine_name[$key];  
  56.   
  57.             if ($record === true)  
  58.             {  
  59.                   
  60.                 $GLOBALS['db']->autoReplace($GLOBALS['ecs']->table('searchengine'), array('date' => local_date('Y-m-d'), 'searchengine' => $spider'count' => 1), array('count' => 1));  
  61.                   
  62.                 //蜘蛛爬行记录 author heui  
  63.                                   
  64.                 $server_name  = $_SERVER["SERVER_NAME"];  
  65.                 $server_port  = $_SERVER["SERVER_PORT"];  
  66.                 $script_name  = $_SERVER["SCRIPT_NAME"];  
  67.                 $query_string = $_SERVER["QUERY_STRING"];  
  68.                 $server_ip    = $_SERVER["REMOTE_ADDR"];  
  69.   
  70.             //获得当前的脚本网址  
  71. $url="http://".$server_name;  
  72.                 if ($server_port != "80")  
  73.                 {  
  74.                     $url = $url.":".$server_port;  
  75.                 }   
  76.     if(!emptyempty($_SERVER["REQUEST_URI"]))  
  77.     {  
  78.         $scriptName = $_SERVER["REQUEST_URI"];  
  79.         $url .= $scriptName;  
  80.     }  
  81.     else  
  82.     {  
  83.         $scriptName = $_SERVER["PHP_SELF"];  
  84.         if(emptyempty($_SERVER["QUERY_STRING"]))  
  85.         {  
  86.             $url .= $scriptName;  
  87.         }  
  88.         else  
  89.         {  
  90.             $url .= $scriptName."?".$_SERVER["QUERY_STRING"];  
  91.         }  
  92.     }  
  93.              
  94.                   
  95.                 $record_count = $GLOBALS['db']->getOne('SELECT COUNT(*) FROM ' . $GLOBALS['ecs']->table('bot'));  
  96.                   
  97.                 if($record_count>=10000)  
  98.                 {  
  99.                     //超过10000开始替换  
  100.                     $mintime = $GLOBALS['db']->getOne("SELECT min(time) FROM ".$GLOBALS['ecs']->table('bot'));                      
  101.                     $minid = $GLOBALS['db']->getOne("SELECT min(id) FROM ".$GLOBALS['ecs']->table('bot'). " WHERE time= $mintime");  
  102.                     if($minid > 5000)  
  103.                     {  
  104.                         //删除记录  
  105.                         $sql = "DELETE FROM ".$GLOBALS['ecs']->table('bot')." WHERE id < 5000 or id > 10000";  
  106.                         $GLOBALS['db']->query($sql);   
  107.                     }  
  108.                     $sql="UPDATE " . $GLOBALS['ecs']->table('bot') . "SET " .  
  109.                                 "url = '$url', bot = '$spider', time = ".gmtime().",ip = '$server_ip' WHERE id= $minid";                      
  110.                     $GLOBALS['db']->query($sql);   
  111.                       
  112.                 }  
  113.                 else  
  114.                 {  
  115.                     $sql="INSERT INTO " . $GLOBALS['ecs']->table('bot') . "(" .  
  116.                                 "id, url, bot, time, ip) ".  
  117.                             "VALUES('', '" . $url . "', '".$spider."','".gmtime()."','".$server_ip"')";  
  118.   
  119.                     $GLOBALS['db']->query($sql);  
  120.                 }  
  121.        
  122.             }  
  123.   
  124.             return $spider;  
  125.         }  
  126.     }  
  127.   
  128.     $spider = '';  
  129.   
  130.     return '';  
  131. }   

 3.增加查看蜘蛛爬行列表页面bot.php

Php代码  收藏代码
  1. <?php  
  2. /** 
  3.  * 蜘蛛爬行记录列表  
  4.  * bot.php 
  5.  * ============================================================================ 
  6.  * @author heui 
  7.  */  
  8. define('IN_ECS', true);  
  9. require(dirname(__FILE__) . '/includes/init.php');  
  10.   
  11. if ((DEBUG_MODE & 2) != 2)  
  12. {  
  13.     $smarty->caching = true;  
  14. }  
  15. /* 初始化分页信息 */  
  16. $page = isset($_REQUEST['page'])   && intval($_REQUEST['page'])  > 0 ? intval($_REQUEST['page'])  : 1;  
  17. $size = 100;  
  18.   
  19. $cache_id = sprintf('%X', crc32($page.'_'.$size));  
  20.   
  21. if (!$smarty->is_cached('bot.dwt'$cache_id))  
  22. {  
  23.     $smarty->assign('bot_list',     get_bot_list($page$size));   
  24.     $record_count = $GLOBALS['db']->getOne('SELECT COUNT(*) FROM ' . $GLOBALS['ecs']->table('bot'));  
  25.     $page_count = $record_count > 0 ? intval(ceil($record_count / $size)) : 1;     
  26.     $smarty->assign('pager',       get_pager('bot.php'array(), $record_count$page$size));       
  27. }  
  28. $smarty->display('bot.dwt'$cache_id);  
  29. /** 
  30.  * 获取蜘蛛爬行记录列表 
  31.  * @author heui 
  32.  * @return  array 
  33.  */  
  34. function get_bot_list($page$size)  
  35. {  
  36.     $sql = "SELECT id, url, bot, time, ip FROM " . $GLOBALS['ecs']->table('bot'). "ORDER BY time DESC";  
  37.     $res = $GLOBALS['db']->selectLimit($sql$size, ($page - 1) * $size);  
  38.       
  39.     $arr = array();  
  40.     date_default_timezone_set('Asia/Shanghai');   
  41.     while ($row = $GLOBALS['db']->fetchRow($res))      
  42.     {  
  43.         $arr[$row['id']]['id']    = $row['id'];  
  44.         $arr[$row['id']]['url']   = $row['url'];  
  45.         $arr[$row['id']]['bot']   = $row['bot'];  
  46.         $arr[$row['id']]['time']  = date("Y-m-j H:i:s",$row['time']);  
  47.         $arr[$row['id']]['ip']    = $row['ip'];  
  48.     }  
  49.   
  50.     return $arr;  
  51. }  

 4.增加蜘蛛爬行列表的模板 bot.dwt

Html代码  收藏代码
  1.  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www./TR/xhtml1/DTD/xhtml1-transitional.dtd">  
  2. <html xmlns="http://www./1999/xhtml">  
  3. <head>  
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  
  5. <title>蜘蛛爬行记录</title>  
  6. <style>  
  7. ul, li{  
  8. float:left;  
  9. list-style: none;  
  10. }  
  11. ul{  
  12. width:900px;  
  13. }  
  14. </style>  
  15. </head>  
  16. <body>  
  17. <ul style="background-color:#FF0000;">  
  18. <li style="width: 50px;">id</li>  
  19. <li style="width: 300px;">url</li>  
  20. <li style="width: 100px;">bot</li>  
  21. <li style="width: 200px;">time</li>  
  22. <li style="width: 200px;">ip</li>  
  23. </ul>  
  24. <!--{foreach from=$bot_list item=bot}-->  
  25. <ul>  
  26. <li style="width: 50px;">{$bot.id}</li>  
  27. <li style="width: 300px;"><a href="{$bot.url}" target="_blank">{$bot.url|truncate:30}</a></li>  
  28. <li style="width: 100px;">{$bot.bot}</li>  
  29. <li style="width: 200px;">{$bot.time}</li>  
  30. <li style="width: 200px;">{$bot.ip}</li>  
  31. </ul>  
  32. <!--{/foreach}-->  
  33.   
  34. <!--翻页 start-->  
  35. <ul><li>  
  36.   <span style="margin-right:10px;">{$lang.pager_1}<b>{$pager.record_count}</b> {$lang.pager_2}</span>  
  37.   <!-- {if $pager.page_first} --><a href="{$pager.page_first}">{$lang.page_first} ...</a><!-- {/if} -->  
  38.   <!-- {if $pager.page_prev} --><a class="prev" href="{$pager.page_prev}">{$lang.page_prev}</a><!-- {/if} -->  
  39.   <!-- {if $pager.page_count neq 1} -->  
  40.     <!--{foreach from=$pager.page_number key=key item=item}-->  
  41.       <!-- {if $pager.page eq $key} -->  
  42.       <span>{$key}</span>  
  43.       <!-- {else} -->  
  44.       <a href="{$item}">[{$key}]</a>  
  45.       <!-- {/if} -->  
  46.     <!--{/foreach}-->  
  47.   <!-- {/if} -->  
  48.   
  49.   <!-- {if $pager.page_next} --><a href="{$pager.page_next}">{$lang.page_next}</a><!-- {/if} -->  
  50.   <!-- {if $pager.page_last} --><a href="{$pager.page_last}">...{$lang.page_last}</a><!-- {/if} -->  
  51. </li></ul>  
  52. <!--翻页 END-->  
  53. </body>  
  54. </html>  

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约