You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

128 lines
4.0 KiB

<?php
/**
* 蜘蛛来访日志插件,记录蜘蛛爬行的时间及其网址
*
* @package RobotsPlus
* @author YoviSun
* @version 2.0.0
* @update: 2013.5.02
* @link http://www.yovisun.com
*/
class RobotsPlus_Plugin implements Typecho_Plugin_Interface
{
public static function activate()
{
$meg = RobotsPlus_Plugin::install();
Helper::addPanel(1, 'RobotsPlus/Logs.php', '蜘蛛日志', '查看蜘蛛日志', 'administrator');
Typecho_Plugin::factory('Widget_Archive')->header = array('RobotsPlus_Plugin', 'isbot');
return _t($meg.'。请进行<a href="options-plugin.php?config=RobotsPlus">初始化设置</a>');
}
public static function deactivate()
{
$config = Typecho_Widget::widget('Widget_Options')->plugin('RobotsPlus');
$isdrop = $config->droptable;
if ($isdrop == 0)
{
$db = Typecho_Db::get();
$prefix = $db->getPrefix();
$db->query("DROP TABLE `".$prefix."robots_logs`", Typecho_Db::WRITE);
}
Helper::removePanel(1, 'RobotsPlus/Logs.php');
}
public static function config(Typecho_Widget_Helper_Form $form)
{
$options = array (
'baidu' => '百度',
'google' => '谷歌',
'sogou' => '搜狗',
'youdao' => '有道',
'soso' => '搜搜',
'bing' => '必应',
'yahoo' => '雅虎',
'360' => '360搜索'
);
$botlist = new Typecho_Widget_Helper_Form_Element_Checkbox(
'botlist', $options, '',
'蜘蛛记录设置:', '请选择要记录的蜘蛛日志');
$pagecount = new Typecho_Widget_Helper_Form_Element_Text(
'pagecount', NULL, '',
'分页数量', '每页显示的日志数量');
$dbool = array (
'0' => '删除',
'1' => '不删除'
);
$droptable = new Typecho_Widget_Helper_Form_Element_Radio(
'droptable', $dbool, '',
'删除数据表:', '请选择是否在禁用插件时,删除日志数据表');
$form->addInput($botlist);
$form->addInput($pagecount);
$form->addInput($droptable);
}
public static function personalConfig(Typecho_Widget_Helper_Form $form)
{
}
public static function install()
{
$installDb = Typecho_Db::get();
$type = explode('_', $installDb->getAdapterName());
$type = array_pop($type);
$prefix = $installDb->getPrefix();
$scripts = file_get_contents('usr/plugins/RobotsPlus/Mysql.sql');
$scripts = str_replace('typecho_', $prefix, $scripts);
$scripts = str_replace('%charset%', 'utf8', $scripts);
$scripts = explode(';', $scripts);
try {
foreach ($scripts as $script) {
$script = trim($script);
if ($script) {
$installDb->query($script, Typecho_Db::WRITE);
}
}
return '成功创建数据表,插件启用成功';
} catch (Typecho_Db_Exception $e) {
$code = $e->getCode();
if(('Mysql' == $type && 1050 == $code)) {
$script = 'SELECT `lid`, `bot`, `url`, `ip`, `ltime` from `' . $prefix . 'robots_logs`';
$installDb->query($script, Typecho_Db::READ);
return '数据表已存在,插件启用成功';
} else {
throw new Typecho_Plugin_Exception('数据表建立失败,插件启用失败。错误号:'.$code);
}
}
}
public static function isbot($rule = NULL)
{
$config = Typecho_Widget::widget('Widget_Options')->plugin('RobotsPlus');
$bot = NULL;
$botlist = $config->botlist;
if (sizeof($botlist)>0) {
@ $useragent = strtolower($_SERVER['HTTP_USER_AGENT']);
foreach ($botlist as $value) {
if (strpos($useragent,$value)!== false) {
$bot = $value;
}
}
if ($bot !== NULL) {
$request = new Typecho_Request;
$ip = $request->getIp();
$url = $_SERVER['REQUEST_URI'];
if ($ip == NULL){
$ip = 'UnKnow';
}
$options = Typecho_Widget::widget('Widget_Options');
$timeStamp = $options->gmtTime;
$offset = $options->timezone - $options->serverTimezone;
$gtime = $timeStamp + $offset;
$db = Typecho_Db::get();
$rows = array (
'bot' => $bot,
'url' => $url,
'ip' => $ip,
'ltime' => $gtime,
);
$db->query($db->insert('table.robots_logs')->rows($rows));
}
}
}
}