php 获取本机外网/公网IP
封面图
•
2025-10-10
•
PHP
156
0
0
0
在 PHP 中获取本机的**外网(公网)IP**,通常需要通过访问第三方服务来获取。因为 PHP 运行在服务器上,无法直接获取客户端的公网 IP(除非你是在本地运行 PHP 并想获取本机的公网 IP)。 以下是一些常见的方法来获取本机的公网 IP: --- ### ✅ 方法一:使用第三方 API 获取公网 IP ```php <?php function getPublicIP() { $url = 'https://api.ipify.org?format=json'; $response = file_get_contents($url); $data = json_decode($response, true); return $data['ip'] ?? '无法获取公网 IP'; } echo "公网 IP: " . getPublicIP(); ?> ``` #### 说明: - `https://api.ipify.org` 是一个免费的 API,返回你的公网 IP。 - 你可以使用其他类似的 API,比如: - `https://ifconfig.me/ip` - `https://ipinfo.io/ip` - `https://checkip.amazonaws.com` --- ### ✅ 方法二:使用 cURL 获取公网 IP ```php <?php function getPublicIP() { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "https://api.ipify.org"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $ip = curl_exec($ch); curl_close($ch); return $ip ?: '无法获取公网 IP'; } echo "公网 IP: " . getPublicIP(); ?> ``` --- ### ✅ 方法三:获取用户访问的公网 IP(即访客的 IP) 如果你是想获取**用户访问你的网站时的公网 IP**,可以使用如下方式: ```php <?php function getUserIP() { 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']; } return $ip; } echo "用户公网 IP: " . getUserIP(); ?> ``` > ⚠️ 注意:`HTTP_X_FORWARDED_FOR` 可能被伪造,如果网站有代理或 CDN,可能需要额外处理。 --- ### ✅ 如果你想获取的是 **服务器本身的公网 IP** 这取决于你是否可以直接访问服务器。例如: - 如果你在自己的服务器上运行 PHP 脚本,可以通过命令行执行 `curl ifconfig.me` 或 `curl api.ipify.org`,然后将结果返回给 PHP。 - 在 PHP 中调用 shell 命令(需权限): ```php <?php $ip = shell_exec('curl -s https://api.ipify.org'); echo "服务器公网 IP: " . $ip; ?> ``` > ⚠️ 使用 `shell_exec` 需要谨慎,确保安全性。 --- ### 总结 | 场景 | 方法 | 说明 | |------|------|------| | 获取用户访问的公网 IP | `$_SERVER['REMOTE_ADDR']` 或 `HTTP_X_FORWARDED_FOR` | 适用于 Web 应用 | | 获取服务器本身的公网 IP | 第三方 API(如 ipify.org) | 通过 HTTP 请求获取 | | 服务器端执行命令 | `shell_exec()` | 仅限于你有权限执行命令的环境 | 如需更安全、稳定的方案,建议使用第三方 API,如 `api.ipify.org`。 需要我帮你封装成函数吗?
上一篇:
php获取mysql数据库中表字段名称
下一篇:
func_get_args()函数
标题录入,一次不能超过6条
返回顶部
留言
留言
评论