У меня небольшой проект, но возникла проблема - PullRequest
0 голосов
/ 11 июля 2020

[11-июл-2020 16:30:39 Америка / Нью-Йорк] PHP Примечание: Неопределенный индекс: HTTP_ACCEPT_LANGUAGE в /home/lunagzdp/s1.lunar.run/req.php в строке 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"]);
        }

Спасибо за помощь!

Ответы [ 2 ]

1 голос
/ 12 июля 2020

Как сказал @Ramiz Kongulov, разные браузеры отправляют информацию заголовка по-разному. Я бы также добавил, что вы должны быть осторожны при доступе к элементам в массиве, поскольку PHP вызовет Undefined Index ошибок, если они недоступны. Используйте оператор объединения null (??) и тернарный оператор (?:) , чтобы избежать таких ошибок в вашем приложении.

В вашем случае, онлайн 36, вы можете сделать что-то вроде этого

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

Вероятно, вы также получите сообщение об ошибке в строке 38.

0 голосов
/ 11 июля 2020

Его содержимое отправляется браузером. Разные браузеры отправляют информацию по-разному. Они могут текст или массив. А иногда они могут вообще не отправлять.

В вашем случае значение по умолчанию можно вернуть следующим образом:

$lang = isset($_SERVER['HTTP_ACCEPT_LANGUAGE']) 
    ? substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2) : 'en';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...