Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用php阻止某些http用户代理_Php_User Agent - Fatal编程技术网

如何使用php阻止某些http用户代理

如何使用php阻止某些http用户代理,php,user-agent,Php,User Agent,有没有办法通过php脚本阻止一些用户代理?mod_安全示例 SecFilterSelective HTTP_USER_AGENT "Agent Name 1" SecFilterSelective HTTP_USER_AGENT "Agent Name 2" SecFilterSelective HTTP_USER_AGENT "Agent Name 3" 我们也可以通过示例使用htaccess或robots.txt来阻止它们,但我需要php。有任何示例代码吗?您应该避免使用正则表达式,因为这

有没有办法通过php脚本阻止一些用户代理?mod_安全示例

SecFilterSelective HTTP_USER_AGENT "Agent Name 1"
SecFilterSelective HTTP_USER_AGENT "Agent Name 2"
SecFilterSelective HTTP_USER_AGENT "Agent Name 3"

我们也可以通过示例使用htaccess或robots.txt来阻止它们,但我需要php。有任何示例代码吗?

您应该避免使用正则表达式,因为这会增加很多资源来阻止连接。相反,只需检查strpos()中是否有字符串


我喜欢@Nerdling的答案,但如果你有一个很长的需要阻止的用户代理列表,那么这可能会有所帮助:

$badAgents = array('fooAgent','blahAgent', 'etcAgent');
foreach($badAgents as $agent) {
    if(strpos($_SERVER['HTTP_USER_AGENT'],$agent) !== false) {
        die('Go away');
    }
}
更好的是:

$badAgents = array('fooAgent','blahAgent', 'etcAgent');
if(in_array($_SERVER['HTTP_USER_AGENT'],$badAgents)) {
    exit();
}

为什么你认为使用regexp“会增加很多资源”?因为PHP的网站上这么说。你应该使用strpos($str)!=false,因为子字符串可以定位在索引0处,并且测试>0将失败。strpos()页面上有一条特别关于类型测试的说明。无论如何,对于2个以上的用户代理,这将是首选方法。是的。。更好,但工作良好,只是测试与感谢卡里姆。
$badAgents = array('fooAgent','blahAgent', 'etcAgent');
if(in_array($_SERVER['HTTP_USER_AGENT'],$badAgents)) {
    exit();
}