記錄搜尋引擎爬蟲(Spider/Bot)造訪路徑、時間、IP,有助於 SEO 分析、伺服器負載監控與異常流量偵測。本文提供完整資料表結構、robot.php 記錄邏輯、前端分頁查詢代碼。
CREATE TABLE `crawler` ( `crawler_ID` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, `crawler_category` VARCHAR(50) NOT NULL, -- 爬蟲名稱:Google, Baidu, Bing... `crawler_date` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, `crawler_url` VARCHAR(500) NOT NULL, -- 被造訪的完整 URL `crawler_IP` VARCHAR(45) NOT NULL -- IPv4/IPv6 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
<?php
// 取得請求資訊
$serverName = $_SERVER['SERVER_NAME'];
$serverPort = $_SERVER['SERVER_PORT'];
$scriptName = $_SERVER['SCRIPT_NAME'];
$queryStr = $_SERVER['QUERY_STRING'];
$clientIP = $_SERVER['REMOTE_ADDR'];
$url = "https://$serverName";
if ($serverPort != 80) $url .= ":$serverPort";
$url .= $scriptName;
if ($queryStr) $url .= "?$queryStr";
$agent = strtolower($_SERVER['HTTP_USER_AGENT']);
$bot = 'Other Crawler';
$patterns = [
'googlebot' => 'Google',
'mediapartners-google' => 'Google Adsense',
'baiduspider' => 'Baidu',
'sogou spider' => 'Sogou',
'yahoo' => 'Yahoo',
'msn' => 'MSN/Bing',
'ia_archiver' => 'Alexa',
'iaarchiver' => 'Alexa',
'sohu' => 'Sohu',
'sqworm' => 'AOL',
'yodaobot' => 'Yodao',
'iaskspider' => 'Iask',
];
foreach ($patterns as $key => $name) {
if (strpos($agent, $key) !== false) {
$bot = $name;
break;
}
}
// 資料庫連線(建議改用 PDO)
require './dbinfo.php'; // 定義 $host, $username, $password, $database
$conn = mysqli_connect($host, $username, $password, $database);
if (!$conn) die('DB Connect Failed: '.mysqli_connect_error());
mysqli_set_charset($conn, 'utf8mb4');
$date = date('Y-m-d H:i:s');
$sql = "INSERT INTO `crawler` (`crawler_category`,`crawler_date`,`crawler_url`,`crawler_IP`)
VALUES (?,?,?,?)";
$stmt = mysqli_prepare($conn, $sql);
mysqli_stmt_bind_param($stmt, 'ssss', $bot, $date, $url, $clientIP);
mysqli_stmt_execute($stmt);
mysqli_stmt_close($stmt);
mysqli_close($conn);
<?php
require './robot.php'; // 記錄當前造訪
require '../library/page.Class.php'; // 分頁類別
require '../library/conn_new.php'; // $mysql 物件
$page = isset($_GET['page']) ? intval($_GET['page']) : 1;
$total = $mysql->num_rows($mysql->query("SELECT 1 FROM `crawler`"));
$pager = new PageClass($total, 20, $page, $_SERVER['PHP_SELF'].'?page={page}');
$sql = "SELECT * FROM `crawler` ORDER BY `crawler_date` DESC LIMIT {$pager->page_limit}, {$pager->myde_size}";
$res = $mysql->query($sql);
?>
<table border="1" cellpadding="5">
<thead>
<tr>
<th>#</th>
<th>造訪時間</th>
<th>爬蟲分類</th>
<th>IP 位址</th>
<th>造訪 URL</th>
</tr>
</thead>
<tbody>
<?php while ($row = $mysql->fetch_array($res)): ?>
<tr>
<td><img src="../images/topicnew.gif" /></td>
<td><?= htmlspecialchars($row['crawler_date']) ?></td>
<td><?= htmlspecialchars($row['crawler_category']) ?></td>
<td><?= htmlspecialchars($row['crawler_IP']) ?></td>
<td><?= htmlspecialchars($row['crawler_url']) ?></td>
</tr>
<?php endwhile; ?>
</tbody>
</table>
<?= $pager->myde_write() ?>
robot.php 以 include 或 auto_prepend_file 方式納入所有頁面入口。crawler_referer 欄位記錄來源頁面。GeoIP 解析 IP 歸屬國家/城市。Elasticsearch 或 ClickHouse 做大數據分析。輕量級記錄系統即可滿足中小型站點爬蟲監控需求,部署簡單、效能開銷極低。