2015-08-22 1 views
1

я нашел некоторую информацию о сохранении IP, и я придумал код ниже:Это правильный способ захватить IP-адрес при отправке формы?

// IP GRAB 
$http_client_ip = $_SERVER['HTTP_CLIENT_IP']; //MORE RELIABLE IP 
$http_x_forwarded_for = $_SERVER['HTTP_X_FORWARDED_FOR']; //ALSO MORE RELIABLE 
$remote_addr = $_SERVER['REMOTE_ADDR']; //NOT RELIABLE BCS IT MAY BE A SHARED NETWORK OR BEHIND A PROXY 

if (!empty($http_client_ip)) { 
    $ip_address = $http_client_ip; 
} else if (!empty($http_x_forwarded_for)) { 
    $ip_address = $http_x_forwarded_for; 
} else { 
    $ip_address = $remote_addr; 
} 

$ip = ip2long($ip_address); 

Я хотел бы, чтобы захватить IP-адрес пользователя, когда пользователь нажатием на кнопку отправить/отправленное форму. Я также хочу сохранить этот IP-адрес в таблице в базе данных. Поэтому я сделал столбец IP в таблице как INT(11) UNSIGNED (Это было рекомендовано для кого-то еще здесь.)

Вкратце: я делаю это правильно?

+1

Это выглядит хорошо, но я проверю все возможные методы, чтобы получить клиентский ip. По этой причине я могу опубликовать функцию, которую я использую. –

+1

Вы делаете это правильно. –

+0

Прямо сейчас у меня на столе «0». Как я могу это проверить? Должен ли я поместить его в Интернет? – idexo

ответ

0

Это то, что я пришел после еще некоторого поиска:

Я изменил INT(11)UNSIGNED к VARCHAR(45), и я просто сохранить IP без использования ip2long(); остальных является таким же, как это было раньше. Теперь он добавляет ::1 в столбец IP на стол, когда я отправляю тест. Я предполагаю, что он работает хорошо, и я проверю его, когда я действительно публикую сайт.

Примечание: Я приму этот ответ, когда он станет доступным. Спасибо за ваше время.

+1

Пожалуйста, используйте ссылку для редактирования по вашему вопросу, чтобы добавить дополнительную информацию. Кнопка «Ответ на сообщение» должна использоваться только для полных ответов на вопрос. – Crack

+0

Спасибо. Затем я обновлю ответ, и я приму его, когда он будет доступен. – idexo

1

Ваш код может продлен, функция последующей может быть использована для получения IP клиента:

function get_client_ip() { 

    $ipaddress = ''; 
    if ($_SERVER['HTTP_CLIENT_IP']) 
     $ipaddress = $_SERVER['HTTP_CLIENT_IP']; 
    else if ($_SERVER['HTTP_X_FORWARDED_FOR']) 
     $ipaddress = $_SERVER['HTTP_X_FORWARDED_FOR']; 
    else if ($_SERVER['HTTP_X_FORWARDED']) 
     $ipaddress = $_SERVER['HTTP_X_FORWARDED']; 
    else if ($_SERVER['HTTP_FORWARDED_FOR']) 
     $ipaddress = $_SERVER['HTTP_FORWARDED_FOR']; 
    else if ($_SERVER['HTTP_FORWARDED']) 
     $ipaddress = $_SERVER['HTTP_FORWARDED']; 
    else if ($_SERVER['REMOTE_ADDR']) 
     $ipaddress = $_SERVER['REMOTE_ADDR']; 
    else 
     $ipaddress = 'UNKNOWN'; 

    return $ipaddress; 
} 

Он также не нужно менять свой IP-к длинной (ip2long), только если у вас есть основания для сделай это.

И я сохраню его как String (VARCHAR) в базе данных.

+0

по какой-то причине я только что видел ваш ответ, но я уже сделал что-то подобное, поэтому я тоже проголосовал за ваше решение. -Похоже, вы только что восстановили свой ответ после моего. – idexo

+0

Я ошибочно удалил свой ответ, чтобы отредактировать его, и забудьте его восстановить, извините за это –