我正在爲我的用戶構建統計信息,並且不希望計算機器人的訪問次數。如何使用php識別機器人?
現在我每次頁面被調用時有一個基本的PHP與MySQL增加1。
但機器人也添加到計數。
有沒有人可以想辦法?
主要是隻是主要的東西搞砸了。谷歌,雅虎,MSN等
我正在爲我的用戶構建統計信息,並且不希望計算機器人的訪問次數。如何使用php識別機器人?
現在我每次頁面被調用時有一個基本的PHP與MySQL增加1。
但機器人也添加到計數。
有沒有人可以想辦法?
主要是隻是主要的東西搞砸了。谷歌,雅虎,MSN等
您應該按照用戶代理字符串進行過濾。您可以在這裏找到約300個常見用戶代理的列表:http://www.robotstxt.org/db.html在運行SQL語句之前遍歷該列表並忽略bot用戶代理應該可以解決您的問題。
如果您不希望搜索引擎甚至到達頁面,請使用基本的robots.txt文件來阻止它們。
您是否嘗試過使用它們的用戶代理信息識別他們?一個簡單的谷歌搜索應該給你谷歌等使用的用戶代理。
這當然不是萬無一失的,但大多數公司的爬蟲提供不同的用戶代理。
編輯:假設你不想限制機器人訪問,但只是不計算它在你的statistc訪問。
在增加頁面查看次數之前檢查user agent,但請記住這可能是欺騙性的。 PHP公開用戶代理$_SERVER['HTTP_USER_AGENT']
,假設Web服務器爲其提供此信息。有關$_SERVER
的更多信息,請參閱http://www.php.net/manual/en/reserved.variables.server.php。
你可以找到http://www.user-agents.org用戶代理的列表;谷歌搜索也將提供屬於主要提供者的名稱。第三個可能的來源是你的Web服務器的訪問日誌,如果你可以聚合它們。
您可以檢查用戶代理字符串,空字符串或包含'robot','spider','crawler','curl'的字符串可能是機器人。
preg_match('/robot|spider|crawler|curl|^$/i', $_SERVER['HTTP_USER_AGENT']));
我們還有一類似用途的情況下給自己,並選擇一個我們最近發現非常有幫助的是user-agent-string.info的UASParser class。
這是一個PHP類拉最新的一組用戶代理字符串的定義和本地緩存他們。該類可以配置爲按照您認爲合適的頻率或罕見頻率提取定義。像這樣自動獲取它們意味着您不必對bot用戶代理或市場上的新用戶進行各種更改,儘管您依賴UAS.info來準確執行此操作。
當這個類被調用時,它解析當前訪問者的用戶代理並返回一個關聯數組來分解組成部分,例如,當UA被確定爲有可能屬於人類訪客,在這種情況下,您可以更新您的統計
Array
(
[typ] => browser
[ua_family] => Firefox
[ua_name] => Firefox 3.0.8
[ua_url] => http://www.mozilla.org/products/firefox/
[ua_company] => Mozilla Foundation
........
[os_company] => Microsoft Corporation.
[os_company_url] => http://www.microsoft.com/
[os_icon] => windowsxp.png
)
場typ
設置爲browser
。需要注意的地方
夫婦在這裏:
非常有用。如果用** bot **替換** robot **以匹配其中一個最活躍的機器人,則更爲有用:「Mozilla/5.0(兼容; Googlebot/2.1; + http://www.google.com/bot。 html)` – 2013-12-30 02:06:39