решено Undefined offset - в логах

vitalix

Пользователь
Появились нотисы в логах - Undefined offset
Код:
Undefined offset: 
 1 in /var/www/***/data/www/***/common.php on line 261
 2 in /var/www/***/data/www/***/common.php on line 261
 3 in /var/www/***/data/www/***/common.php on line 261
common.php
Код:
function encode_ip ($ip)
{
    $d = explode('.', $ip);
    return sprintf('%02x%02x%02x%02x', $d[0], $d[1], $d[2], $d[3]);
}
В связи с чем такое появляется ?
 

Exile

Администратор
Мод для чтения ЛС случаем не ставили? Я вроде там encode_ip использовал. И как верно заметили, для пустых IP его нельзя использовать.
 

notebug

Пользователь
Возможно ли что это связанно со сменой ip на vsd ?
нет, не думаю. Просто в манах посмотрите, что каждая функция делает внутри вашей, где происходит ошибка. все же, есть вероятность отсутствия значения в переменной $ip, иначе нечего будет "разбирать" в первой функции. Отсюда и массив значений пустой, который далее пытается функция получить
 
L

ler

Гость
Тоже такая ошибка на одном сайте. А как быть с массивом $d в котором заведомо не известно количество переменных?
 

notebug

Пользователь
Тоже такая ошибка на одном сайте. А как быть с массивом $d в котором заведомо не известно количество переменных?
Ну как? Количество элементов в массиве должно быть как минимум 4, да и как максимум тоже, например:
[0] -> 192
[1] -> 168
[2] -> 253
[3] -> 1

А там уж, если передается в переменную $ip не айпи, тогда черт его знает, что может быть, поэтому следовало бы все же проверять на пустоту и обязательно на размерность массива. Если айпи пустой и элементов в массиве меньше 4 - до свидания.
 

Dr_Brown

Пользователь
Подниму еще раз тему, после перехода на cloudflare в логи ($_SERVER['REMOTE_ADDR']) некоторые клиенты передают ipv6 адреса типа 2a00:c98:2060:a008:5::1 , естно идут нотисы указанные выше в common.php. В init_bb.php есть кусок который определяет ip клиента:

Код:
// Obtain and encode user IP
$client_ip = !empty($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : '127.0.0.1';
$user_ip = encode_ip($client_ip);
define('CLIENT_IP', $client_ip);
define('USER_IP',   $user_ip);

как перекодировать ipv6 в ipv4, если это реально, или поставить какой костыль, так как реально нотисы в логах за сутки по 15 Мб набирают, считывание других заголовков типа 'HTTP_CF_CONNECTING_IP или HTTP_X_REAL_IP не помогает. Заметил когда подключился через встроенный vpn в Опере, она начала передавать в REMOTE_ADDR айпи типа ipv6, и полезли нотисы, проверил access логи сервера, действительно попадают в одно время заходы ipv6 с нотисами. На старых версиях не замечено нотисов, только на 2,1,5
 
Последнее редактирование:
Сверху