核心邏輯
- 獲取
$_SERVER['HTTP_REFERER']`。
- 解析 URL 組件(
parse_url)與查詢字符串(parse_str)。
- 根據主域名匹配對應搜索引擎的關鍵詞參數名(如百度
word、Google q)。
- 提取關鍵詞並入庫記錄。
完整代碼
<?php
$rfr = $_SERVER['HTTP_REFERER'];
if ($rfr) {
$p = parse_url($rfr);
parse_str($p['query'], $pa);
$p['host'] = strtolower($p['host']);
$arr_sd_key = [
'baidu.com' => 'word',
'google.com' => 'q',
'sina.com.cn' => 'word',
'sohu.com' => 'word',
'msn.com' => 'q',
'bing.com' => 'q',
'163.com' => 'q',
'yahoo.com' => 'p',
];
$keyword = '';
$sengine = $p['host'];
foreach ($arr_sd_key as $se => $kwd) {
if (strpos($p['host'], $se) !== false) {
$keyword = $pa[$kwd] ?? '';
$sengine = $se;
break;
}
}
// 入庫示例(需自行連接數據庫)
// $sql = "INSERT INTO visit_log (domain, key_word, ct) VALUES (?, ?, NOW())";
// $stmt->bind_param('ss', $sengine, $keyword);
// $stmt->execute();
}
?>
優化與擴展建議
- 使用
parse_url($rfr, PHP_URL_HOST) 直接取 host,避免完整解析開銷。
- 搜索引擎列表應持久化到配置文件/數據庫,便於動態擴展。
- 關鍵詞通常為 URL 編碼,入庫前需
urldecode() 並過濾 XSS。
- 現代搜索引擎多為 HTTPS,Referer 可能為空或被策略截斷,可結合 UTM 參數、站長平台 API 獲取更完整數據。
- 考慮使用
INSERT IGNORE 或 ON DUPLICATE KEY UPDATE 統計關鍵詞頻次。