我试图删除一个特定的机器人,如SemrushBot或googlebot(可以是其他机器人),但它不起作用。 谢谢
if(!preg_match('/SemrushBot/i', $_SERVER['HTTP_USER_AGENT']) || !preg_match('/googlebot/i', $_SERVER['HTTP_USER_AGENT']))
{
my code to execute
}
答案 0 :(得分:1)
劳伦斯·谢罗(Lawrence Cherone)已经给了您提示,但是您将其丢弃了。 由于不正确的集合定义,您在IF语句中始终满足条件。
这是典型的错误,即使是经验丰富的开发人员也无法幸免。 当您处理交集/被求逆的集合的排除项时,总是很难解释复杂的条件(从视觉上重建视觉上的画面)。
您要实现的是检查值是否不属于特定的值集。
要做到这一点,您需要定义一组期望值,然后检查该值是否属于该特定集合,然后您需要将这种检查的结果求反以得到所需结果。
因此,您基本上需要首先检查访客是否是靴子
$isBot = preg_match('/SemrushBot/i', $_SERVER['HTTP_USER_AGENT']) || preg_match('/googlebot/i', $_SERVER['HTTP_USER_AGENT']);
然后将其反转
$humanVisitor = ! $isBot;
if ( $humanVisitor ){
//do something specific to human visitors
}
或使用非用户友好的单班轮
if(! ( preg_match('/SemrushBot/i', $_SERVER['HTTP_USER_AGENT']) || preg_match('/googlebot/i', $_SERVER['HTTP_USER_AGENT']) )){
//do something specific to human visitors
}
我的建议是,如果可能的话,将这种情况分成几行,那么以后进行代码审查的任何人都将在理解您的代码方面没有困难