PHP注意:未定义的索引:第2行的HTTP_USER_AGENT

时间:2013-05-02 04:47:18

标签: php user-agent error-log

我在索引页面的顶部添加了3行代码,以消除imac设备中发生的错误请求。代码如下:

<?php
if (preg_match ("/CaptiveNetworkSupport/", $_SERVER["HTTP_USER_AGENT"])) {
header ("HTTP/1.0 400 Bad Request");
exit ();
}
?>

但是我可以在error_log中看到很多“PHP Notice:Undefined index:HTTP_USER_AGENT in”错误。如何删除这些日志?

谢谢!

4 个答案:

答案 0 :(得分:3)

如果你测试索引是否存在于preg_match

之前,也许
    <?php
        if ( isset($_SERVER["HTTP_USER_AGENT"]) && preg_match ("/CaptiveNetworkSupport/", $_SERVER["HTTP_USER_AGENT"]) )
        {
            header ("HTTP/1.0 400 Bad Request");
            exit ();
        }
    ?>

答案 1 :(得分:1)

你可以确保先设置它:

<?php
    if (isset($_SERVER["HTTP_USER_AGENT"]) && preg_match ("/CaptiveNetworkSupport/", $_SERVER["HTTP_USER_AGENT"])) {
        header ("HTTP/1.0 400 Bad Request");
        exit ();
    }
?>

答案 2 :(得分:1)

基于用户代理检测的标头重定向可能会很快失控。我多年来继承的相当多的网站都有大量的.htaccess文件,这些文件会减慢服务器连接速度。为了将来进行校对,您可以从一系列搜索开始检查(有点像黑名单)。我通常将我的存储在数据库中。以下是使用相同函数对user_agents和ip_addresses有效的示例。

<?php
//user agent blacklist array
$uab = array(
'!^$!','!CaptiveNetworkSupport!','!curl!i'
);

//User agent handling array
$uah = array(
'HTTP/1.0 400 Bad Request','HTTP/1.0 400 Bad Request','HTTP/1.0 403 Forbidden',
);

$ipb = array(
'!^1\.2\.3!',
'!^8\.8\.8\.8!',
'!^199\.21!',
'!^0\.0\.0\.0$!',
);

$iph = array(
'Location: /no-bots.php',
'Location: /warning.php',
'HTTP/1.0 403 Forbidden',
'HTTP/1.0 403 Forbidden',
);


function blackList($blacklist,$handler,$means){

    foreach($blacklist as $key=>$bl){
        if (preg_match($bl,$means)){
            header($handler[$key]);
            exit();
        }
    }
}

if(!empty($_SERVER['HTTP_USER_AGENT'])){
  $user_agent = $_SERVER['HTTP_USER_AGENT'];    
} else {
  $user_agent = ''; 
}

blackList($uab,$uah,$user_agent);

//This should always be set!
if(!empty($_SERVER['REMOTE_ADDR'])){
  $ip_address = $_SERVER['REMOTE_ADDR'];    
} else {
    $ip_address = '0.0.0.0';
}

blackList($ipb,$iph,$ip_address);

?>

在我的自定义CMS中,我有一个禁止页面,允许后端用户确定罪犯如何受到惩罚或对待。它对于阻止各种事情很有用,最好与iptables一起使用时。

答案 3 :(得分:0)

使用isset($_SERVER['HTTP_USER_AGENT'])array_key_exists( 'HTTP_USER_AGENT', $_SERVER )检查密钥HTTP_USER_AGENT是否存在。

当您引用不存在的密钥时,您会收到通知。你可以在配置中全局禁止通知,但这是一种非常糟糕的做法。

您可以使用@来抑制单个呼叫的所有错误。例如:@$_SERVER['HTTP_USER_AGENT']

(抱歉英语不好)