📌  相关文章
📜  preg_match('bot|crawl|curl|dataprovider|search|get|spider|find|java|majesticsEO|google|yahoo|teoma|contaxe|yandex|libwww-perl|facebookexternalhit i', $_SERVER['HTTP_USER_AGENT']) -无论(1)

📅  最后修改于: 2023-12-03 15:18:41.571000             🧑  作者: Mango

介绍 preg_match()

preg_match() 是 PHP 中的一个函数,用于在一个字符串中搜索匹配指定模式的内容。

在本例中,preg_match() 函数被用来查找浏览器的 User-Agent 字段中是否包含了一些常见的爬虫、蜘蛛或机器人的信息。

该函数的语法如下:

preg_match($pattern, $subject, $matches)

其中,$pattern 是要搜索的模式,支持使用正则表达式;$subject 是要进行搜索的字符串;$matches 是用于存储搜索结果的变量。

如果返回值是 1,则表示搜索到了匹配的字符串,反之为 0。

在本例中,preg_match() 函数的返回值将用于判断当前访问者是否为机器人,从而采取不同的行为。

该函数需要注意的一些细节:

  • $pattern 参数需要用引号括起来,且需要使用 / 进行定界符;
  • $matches 参数是一个数组,包含在 $subject 中搜索到的结果;
  • 如果要搜索的字符串中包含了定界符,需要使用反斜线进行转义。

HTTP_USER_AGENT 字段

HTTP_USER_AGENT 是一个 HTTP 请求头字段,用于标识客户端的一些信息,比如客户端的浏览器类型、版本号、操作系统等。

在本例中,我们主要使用 HTTP_USER_AGENT 字段来识别当前访问者是否为机器人。

判断机器人的关键词

我们在 $pattern 参数中使用了一些关键词,用于判断当前访问者是否为机器人。这些关键词包括:

  • bot
  • crawl
  • curl
  • dataprovider
  • search
  • get
  • spider
  • find
  • java
  • majesticsEO
  • google
  • yahoo
  • teoma
  • contaxe
  • yandex
  • libwww-perl
  • facebookexternalhit

我们使用了 | 运算符将这些关键词连接起来,表示只要匹配其中一个关键词就可以判断当前访问者为机器人。

需要注意的是,这些关键词并不是绝对的,有些机器人可能不会包含这些关键词,需要根据实际情况进行调整。

完整代码

以下是使用 preg_match() 函数判断机器人的 PHP 代码片段:

if (preg_match('/bot|crawl|curl|dataprovider|search|get|spider|find|java|majesticsEO|google|yahoo|teoma|contaxe|yandex|libwww-perl|facebookexternalhit/i', $_SERVER['HTTP_USER_AGENT'])) {
    // 当前访问者是机器人
} else {
    // 当前访问者不是机器人
}

其中,/i 参数表示在搜索时不区分大小写。