$_SERVER['REMOTE_ADDR']
может фактически не содержать реальных IP-адресов клиента, поскольку он даст вам прокси-адрес для клиентов, подключенных через прокси-сервер, например. Однако это может быть то, что вы действительно хотите, в зависимости от того, что вы делаете с IP-адресами. Частный адрес RFC1918 у кого-то может не принести вам пользы, если вы скажете, пытаясь узнать, откуда происходит ваш трафик, или вспомнить, какой IP-адрес был последним подключен к пользователю, где может быть больше общедоступный IP-адрес прокси-сервера или шлюза NAT
Существует несколько HTTP-заголовков, таких как X-Forwarded-For
, которые могут или не могут быть заданы различными прокси-серверами. Проблема в том, что это просто HTTP-заголовки, которые могут быть установлены кем угодно. Нет никаких гарантий относительно их содержания. $_SERVER['REMOTE_ADDR']
- это фактический физический IP-адрес, на который веб-сервер получил соединение и ответ будет отправлен. Все остальное - это произвольная и добровольная информация. Существует только один сценарий, в котором вы можете доверять этой информации: вы контролируете прокси-сервер, который устанавливает этот заголовок. Значение только в том случае, если вы знаете 100%, где и как был настроен заголовок, если вы прислушаетесь к нему для чего-то важного.
Сказав это, вот пример кода:
if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
$ip = $_SERVER['HTTP_CLIENT_IP'];
} elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
} else {
$ip = $_SERVER['REMOTE_ADDR'];
}
Редактор Примечание. Использование вышеуказанного кода имеет последствия для безопасности. Клиент может настроить всю информацию заголовка HTTP (т.е. $_SERVER['HTTP_...
) на любое произвольное значение, которое он хочет. Таким образом, гораздо надежнее использовать $_SERVER['REMOTE_ADDR']
, поскольку пользователь не может установить его.
От: http://roshanbh.com.np/2007/12/getting-real -ip-адрес-в-php.html
Простое решение R base - это использование match
:
dat$group <- df$x[match(dat$z,df$y)]
dat
z group
1 abl A
2 abl A
3 abl A
4 abl A
5 rtg A
6 rtg A
7 jaf A
8 zfw <NA>
9 zfw <NA>
10 zfw <NA>
11 thk C
Вы пытаетесь сделать операцию join
:
dplyr::left_join(dat, df, by = c('z' = 'y'))
z group x
1 abl NA A
2 abl NA A
3 abl NA A
4 abl NA A
5 rtg NA A
6 rtg NA A
7 jaf NA A
8 zfw NA <NA>
9 zfw NA <NA>
10 zfw NA <NA>
11 thk NA C
Связанный дубликат будет иметь несколько различных стратегий, но я думаю, что было бы полезно узнать подходящий термин для такого рода операций.