function getUserIpAddress() {
foreach ( [ 'HTTP_CLIENT_IP', 'HTTP_X_FORWARDED_FOR', 'HTTP_X_FORWARDED', 'HTTP_X_CLUSTER_CLIENT_IP', 'HTTP_FORWARDED_FOR', 'HTTP_FORWARDED', 'REMOTE_ADDR' ] as $key ) {
// Comprobamos si existe la clave solicitada en el array de la variable $_SERVER
if ( array_key_exists( $key, $_SERVER ) ) {
// Eliminamos los espacios blancos del inicio y final para cada clave que existe en la variable $_SERVER
foreach ( array_map( 'trim', explode( ',', $_SERVER[ $key ] ) ) as $ip ) {
// Filtramos* la variable y retorna el primero que pase el filtro
if ( filter_var( $ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE ) !== false ) {
return $ip;
}
}
}
}
return '?'; // Retornamos '?' si no hay ninguna IP o no pase el filtro
}
我将分享一个我创建的用于研究的 PHP 脚本。我使用它来了解访问 Android 应用程序的人,该应用程序通过 URL 查阅我服务器上的数据。
该脚本显示以下内容:
成绩:
它在一个脚本中,选项比您要求的要多,如果您只想获取 IP,您可以忽略其他部分,例如使用 Geoplugin 或获取 URL 等。
Geoplugin是一个有趣的 API ,一个免费的网站管理员资源,可轻松提供地理定位技术...
它用于定位 IP 和其他用途,您可以在链接中在线尝试。
好的,现在我们开始使用脚本。我已经评论了一些东西,所以很容易理解:
代码:
结果
写入文件的部分数据:
答案中给出的代码很容易受到欺骗,您必须小心使用它。
简单来说:
在答案
HTTP_
中,有几个标头(HTTP
curl --header "X-Forwarded-For: 192.168.0.2" http://example.com
也就是说,为了安全(例如在身份验证环境或类似环境中),不应使用这些值,因为客户端/用户可以修改标头
X_FORWARDED_FOR
或CLIENT_IP
任何值,除非您有受信任的反向代理而且您仍然应该验证客户端/用户输入,因为它可能在标头中包含危险语句
HTTP
,例如:'; DROP TABLE users;--
不在代理后面:
REMOTE_ADDR
将为您提供一个真实的IP ,这将是您可以获得的最可靠的 IP,它是TCP连接的源 IP,并且不能通过更改标头来替换HTTP
。知道这一切并采取预防措施,您可以通过以下方式获取IP:
*我们使用函数
filter_var()
过滤具有以下指示的值:FILTER_VALIDATE_IP
FILTER_FLAG_NO_PRIV_RANGE
:FILTER_FLAG_NO_RES_RANGE
:资料来源:
根据你的问题,试试这个方法。希望这可以帮到你。