下面我会详细讲解如何实现获取PHP地址的五种方法,并提供插入用户登录日志的操作示例。
获取IP地址的五种方法
1. 使用 $_SERVER['REMOTE_ADDR']
方法
这是 PHP 内置的函数,可以直接获取用户的 IP 地址,代码如下:
$ip = $_SERVER['REMOTE_ADDR'];
2. 通过 HTTP 头中的 X-Forwarded-For
对于一些经过代理服务器的请求,可能用户的真实 IP 地址已经被伪造了,这时我们需要通过 HTTP 头中的 X-Forwarded-For 来获取真实的用户 IP 地址。代码如下:
if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
} elseif (isset($_SERVER['HTTP_CLIENT_IP'])) {
$ip = $_SERVER['HTTP_CLIENT_IP'];
} else {
$ip = $_SERVER['REMOTE_ADDR'];
}
这里需要注意,由于 HTTP_X_FORWARDED_FOR
和 HTTP_CLIENT_IP
这两个头信息是可以伪造的,所以我们需要做一些数据验证。
3. 使用第三方 IP 地址查询 API
除了以上两种方式,我们还可以通过调用第三方 API 获取用户 IP 地址信息。代码如下:
$ip = ''; // 获取用户 IP 地址
$url = 'http://api.ipstack.com/' . $ip . '?access_key=' . $access_key;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$output = curl_exec($ch);
curl_close($ch);
$location = json_decode($output, true);
$ip = $location['ip'];
其中 $access_key 是我们注册第三方 API 时获得的访问密钥。
4. 使用 DNS 解析服务器主机名
通过使用 gethostbyname 函数,来直接解析域名得到 IP 地址。代码如下:
$ip = gethostbyname('www.example.com');
5. PHP-fpm通过fastcgi_param传递
在PHP-fpm环境下,可以通过在nginx的conf文件中的 fastcgi_param
传递环境变量 REMOTE_ADDR
,代码如下:
location ~ \.(php|html|htm)$ {
fastcgi_pass unix:/var/run/php-fpm.sock;
fastcgi_index index.php;
fastcgi_param REMOTE_ADDR $remote_addr;
include fastcgi_params;
}
插入用户登录日志操作示例
对于网站而言,用户登录日志是非常重要的,可以在出现问题时方便查错。下面是一个基本的插入登录日志的例子:
session_start();
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$username = $_POST['username'];
$password = $_POST['password'];
if (check_login($username, $password)) {
$_SESSION['username'] = $username;
// 插入登录日志
$ip = get_client_ip();
$time = time();
$sql = "INSERT INTO login_log (username, login_time, login_ip) VALUES ('$username', '$time', '$ip')";
insert($sql);
header('Location: index.php');
exit();
} else {
echo '用户名或密码错误';
}
}
其中, get_client_ip()
函数为获取用户 IP 地址的函数。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:PHP实现获取ip地址的5种方法,以及插入用户登录日志操作示例 - Python技术站