記錄搜尋引擎蜘蛛 (Spider/Bot) 的爬行行為,有助於 SEO 分析、伺服器負載監控與異常流量偵測。本文提供完整的安裝腳本、資料表建立、蜘蛛辨識邏輯與部署方式。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>蜘蛛記錄系統安裝</title>
</head>
<body>
<form action="setup.php" method="post">
<table>
<tr><td>資料庫主機:</td><td><input name="server" value="localhost"></td></tr>
<tr><td>資料庫用戶:</td><td><input name="sqluser" value="root"></td></tr>
<tr><td>資料庫密碼:</td><td><input type="password" name="sqlpass"></td></tr>
<tr><td>資料庫名稱:</td><td><input name="sqldb" value="spider_log"></td></tr>
<tr><td>管理員帳號:</td><td><input name="adminname" value="admin"></td></tr>
<tr><td>管理員密碼:</td><td><input type="password" name="adminpass" value="admin"></td></tr>
<tr><td colspan="2"><input type="submit" value="開始安裝"></td></tr>
</table>
</form>
</body>
</html>
<?php
$server = $_POST['server'] ?? '';
$sqluser = $_POST['sqluser'] ?? '';
$sqlpass = $_POST['sqlpass'] ?? '';
$sqldb = $_POST['sqldb'] ?? '';
$adminname = $_POST['adminname'] ?? '';
$adminpass = md5($_POST['adminpass'] ?? '');
$conn = @mysql_connect($server, $sqluser, $sqlpass);
if (!$conn) die("<script>alert('資料庫連線失敗');history.back();</script>");
@mysql_select_db($sqldb) or die("<script>alert('資料庫不存在');history.back();</script>");
// 建立蜘蛛記錄表
$sql = "CREATE TABLE IF NOT EXISTS `robots` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`robotsname` VARCHAR(200) DEFAULT NULL,
`robotsip` VARCHAR(200) DEFAULT NULL,
`riqi` DATE DEFAULT NULL,
`shijian` TIME DEFAULT NULL,
`robotspage` VARCHAR(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4";
if (mysql_query($sql, $conn)) {
// 寫入設定檔 (建議改用 JSON 或 .env 格式)
$config = "<?php\n";
$config .= "\$db_host = '$server';\n";
$config .= "\$db_user = '$sqluser';\n";
$config .= "\$db_pass = '$sqlpass';\n";
$config .= "\$db_name = '$sqldb';\n";
$config .= "\$admin_user = '$adminname';\n";
$config .= "\$admin_pass = '$adminpass';\n";
$config .= "?>";
file_put_contents('../config.php', $config);
rename('setup.php', 'setup.lock');
echo "<script>alert('安裝成功!');location.href='../index.html';</script>";
} else {
echo "<script>alert('建立資料表失敗');history.back();</script>";
}
?>
<?php
require_once 'config.php';
// 建立資料庫連線 (建議改用 PDO/MySQLi)
$conn = mysql_connect($db_host, $db_user, $db_pass);
mysql_select_db($db_name, $conn);
mysql_query('SET NAMES utf8', $conn);
// 取得訪客資訊
$uri = $_SERVER['REQUEST_URI'] ?? '';
$ua = $_SERVER['HTTP_USER_AGENT'] ?? '';
$ref = $_SERVER['HTTP_REFERER'] ?? '';
$ip = $_SERVER['REMOTE_ADDR'] ?? '';
$date = date('Y-m-d');
$time = date('H:i:s');
// 蜘蛛辨譽邏輯 (依 User-Agent 關鍵字)
$spiders = [
'baidu' => 'Baiduspider',
'google' => 'Googlebot',
'soso' => 'Sosospider',
'youdao' => 'YoudaoBot',
'bing' => 'Bingbot',
'sogou' => 'Sogou web spider',
'yahoo' => 'Yahoo! Slurp',
'yandex' => 'YandexBot',
'360' => '360Spider',
'byte' => 'Bytespider', // 字節跳動
];
$spiderName = null;
foreach ($spiders as $key => $agent) {
if (stripos($ua, $agent) !== false) {
$spiderName = $key;
break;
}
}
// 記錄已識別的蜘蛛
if ($spiderName) {
$sql = "INSERT INTO `robots` (robotsname, robotspage, robotsip, riqi, shijian) "
. "VALUES ('" . mysql_real_escape_string($spiderName, $conn) . "', "
. "'" . mysql_real_escape_string($uri, $conn) . "', "
. "'" . mysql_real_escape_string($ip, $conn) . "', "
. "'{$date}', '{$time}')";
mysql_query($sql, $conn);
}
mysql_close($conn);
?>
<?php
// 在每個頁面最頂端引入
include_once 'path/to/zz.php';
?>
<script src="path/to/zz.php"></script>
zz.php 需輸出 JS 內容 (如 document.write('')) 避免錯誤。
<?php
// 統計各蜘蛛造訪次數
$sql = "SELECT robotsname, COUNT(*) as cnt FROM robots GROUP BY robotsname ORDER BY cnt DESC";
// 近 7 天蜘蛛活動趨勢
$sql = "SELECT riqi, robotsname, COUNT(*) as cnt FROM robots WHERE riqi >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY riqi, robotsname";
// 特定蜘蛛爬取的頁面
$sql = "SELECT DISTINCT robotspage FROM robots WHERE robotsname = 'google' ORDER BY riqi DESC LIMIT 100";
?>