PHP注意:未定义索引:第2行中的HTTP\u USER\u代理

PHP注意:未定义索引:第2行中的HTTP\u USER\u代理,php,user-agent,error-log,Php,User Agent,Error Log,我在索引页面顶部添加了一个3行代码,以消除imac设备中出现的错误请求。代码如下: <?php if (preg_match ("/CaptiveNetworkSupport/", $_SERVER["HTTP_USER_AGENT"])) { header ("HTTP/1.0 400 Bad Request"); exit (); } ?> 但是我可以在错误日志中看到很多“PHP注意:未定义索引:HTTP用户代理”。如何删除这些日志 谢谢 如果您在preg\u匹配之前测试索

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

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

但是我可以在错误日志中看到很多“PHP注意:未定义索引:HTTP用户代理”。如何删除这些日志


谢谢

如果您在
preg\u匹配之前测试索引是否存在

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

如果您在
预匹配之前测试索引是否存在

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

您可以确保先设置它:

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

您可以确保先设置它:

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

使用
isset($\u服务器['HTTP\u用户\u代理])
数组\u密钥存在('HTTP\u用户\u代理',$\u服务器)
检查密钥
HTTP\u用户\u代理是否存在

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

您可以使用@抑制单个调用的所有错误。例如:
@$\u服务器['HTTP\u用户\u代理]

(抱歉英语不好)

使用
isset($\u服务器['HTTP\u用户\u代理])
数组\u密钥存在('HTTP\u用户\u代理',$\u服务器)
检查密钥
HTTP\u用户\u代理是否存在

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

您可以使用@抑制单个调用的所有错误。例如:
@$\u服务器['HTTP\u用户\u代理]


(很抱歉英语不好)

基于用户代理检测的头重定向可以快速失控。我多年来继承的很多站点都有大量的
.htaccess
文件,这些文件会降低服务器连接速度。对于未来的证明,您可以从一系列要检查的搜索开始(有点像黑名单)。我通常把我的储存在数据库里。下面是一个例子,说明使用相同函数的用户\代理和ip \地址的工作原理

<?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结合使用。

基于用户代理检测的头重定向可以快速失控。我多年来继承的很多站点都有大量的
.htaccess
文件,这些文件会降低服务器连接速度。对于未来的证明,您可以从一系列要检查的搜索开始(有点像黑名单)。我通常把我的储存在数据库里。下面是一个例子,说明使用相同函数的用户\代理和ip \地址的工作原理

<?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结合使用。

我要补充的是,基于用户代理的阻止通常是徒劳的。客户端躺在UA字符串中并不重要。我只想补充一点,基于用户代理的阻塞通常是徒劳的。对客户来说,说谎是很平常的事。