首页 > 解决方案 > 我有一个较小的项目,但出现了问题

问题描述

[11-Jul-2020 16:30:39 America/New_York] PHP 通知:未定义索引:/home/lunagzdp/s1.lunar.run/req.php 中的 HTTP_ACCEPT_LANGUAGE 第 36 行:error_log

不知道怎么解决

<?php
    ini_set('default_charset', 'UTF-8');
    ini_set('display_errors', true);
    ini_set('error_reporting', 'E_ALL');
    error_reporting(E_ALL);
        session_start();
        
        function get_client_ip(){
            $ipaddress = '';
            if (isset($_SERVER['HTTP_CLIENT_IP']))
                $ipaddress = $_SERVER['HTTP_CLIENT_IP'];
            else if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])) //VestaCP na CF wypluwa [ip, ip]
                $ipaddress = $_SERVER['HTTP_X_FORWARDED_FOR'];
            else if(isset($_SERVER['HTTP_X_FORWARDED']))
                $ipaddress = $_SERVER['HTTP_X_FORWARDED'];
            else if(isset($_SERVER['HTTP_FORWARDED_FOR']))
                $ipaddress = $_SERVER['HTTP_FORWARDED_FOR'];
            else if(isset($_SERVER['HTTP_FORWARDED']))
                $ipaddress = $_SERVER['HTTP_FORWARDED'];
            else if(isset($_SERVER['REMOTE_ADDR']))
                $ipaddress = $_SERVER['REMOTE_ADDR'];
            else if(isset($_SERVER['HTTP_CF_CONNECTING_IP']))
                $ipaddress = $_SERVER['HTTP_CF_CONNECTING_IP'];
            else
                $ipaddress = 's1.lunar.run';
         
            return $ipaddress;
        }
        
        $ip = get_client_ip();
        
        include('settings.php');
        const main_table = 'players';
         36 line -> $lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2); <-
        function isMobile() {
            return preg_match("/(android|avantgo|blackberry|bolt|boost|cricket|docomo|fone|hiptop|mini|mobi|palm|phone|pie|tablet|up\.browser|up\.link|webos|wos)/i", $_SERVER["HTTP_USER_AGENT"]);
        }

谢谢你的帮助!

标签: phphttp-headers

解决方案


就像@Ramiz Kongulov 所说,不同的浏览器以不同的方式发送标头信息。我还要补充一点,在访问数组中的元素时应该小心,因为 Undefined Index如果它们不可用,PHP 会抛出错误。使用空合并运算符 (??)三元运算符 (?:)来避免应用程序中的此类错误。

在你的情况下,在第 36 行,你可以做这样的事情

$lang = isset($_SERVER['HTTP_ACCEPT_LANGUAGE']) ? substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2) : 'en';

您也可能会在第 38 行收到错误消息。


推荐阅读