繁体   English   中英

我有一个较小的项目,但出现了问题

[英]I have a smaller project but there was a problem

[11-Jul-2020 16:30:39 America/New_York] PHP 注意:未定义索引:HTTP_ACCEPT_LANGUAGE in /home/lunagzdp/s1.lunar.run/req.ZE1BFD762321E409CEE4AC0B6E84_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"]);
        }

谢谢你的帮助!

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

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

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

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

其内容由浏览器发送。 不同的浏览器以不同的方式发送信息。 它们可以是文本,也可以是数组。 有时他们可能根本不发送。

在您的情况下,可以通过以下方式返回默认值:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM