You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP获取IP地址详情在VPS主机不显示的问题如何排查

排查步骤
  • 第一步:确认基础变量正常获取
    先在代码开头添加打印逻辑,验证传入的域名和解析后的IP是否正确:
    var_dump($_POST['web'], $ip_address);
    
    若IP解析失败,检查VPS的DNS配置是否正常,可在VPS命令行执行nslookup 测试域名验证解析能力。
  • 第二步:检查allow_url_fopen配置是否开启
    代码用file_get_contents发起远程HTTP请求,依赖PHP配置项allow_url_fopen = On。很多VPS默认关闭该配置,可通过phpinfo()查看当前配置值,若为Off需修改php.ini配置后重启PHP服务。
  • 第三步:关闭错误抑制、开启报错查看具体问题
    你代码中第一个接口调用前加了@错误抑制符,会屏蔽所有请求错误。先删除@,并在代码顶部添加报错配置:
    ini_set('display_errors', 1);
    error_reporting(E_ALL);
    
    重新访问页面即可看到具体报错信息,是请求失败、JSON解析失败还是返回结构异常。
  • 第四步:验证VPS出站网络是否能访问第三方接口
    在VPS命令行执行以下命令,测试是否能正常请求两个IP查询接口:
    # 测试geoplugin接口
    curl "http://www.geoplugin.net/json.gp?ip=8.8.8.8"
    # 测试iplocate接口
    curl "https://www.iplocate.io/api/lookup/8.8.8.8"
    
    若请求超时或返回错误,检查VPS防火墙是否限制了80/443端口出站访问,或VPS出口IP是否被第三方接口封禁。如果VPS默认优先使用IPv6访问,而接口不支持IPv6,可配置请求强制走IPv4。
  • 第五步:排查HTTPS请求证书问题
    第二个接口为HTTPS协议,若请求失败大概率是PHP没有配置可信CA证书导致证书校验失败。排查时可临时添加stream context忽略证书校验验证问题:
    $context = stream_context_create([
        'ssl' => [
            'verify_peer' => false,
            'verify_peer_name' => false,
        ]
    ]);
    $res = file_get_contents('https://www.iplocate.io/api/lookup/'.$ip, false, $context);
    
    验证可行后建议正式环境配置正确的CA证书路径到php.ini的openssl.cafile配置项,不要长期关闭证书校验。
  • 第六步:验证接口返回内容是否正常
    打印两个接口的原始返回内容,确认是否返回了合法的JSON结构:
    var_dump(file_get_contents("http://www.geoplugin.net/json.gp?ip=".$ip));
    var_dump(file_get_contents('https://www.iplocate.io/api/lookup/'.$ip));
    
    若返回非JSON内容(如拦截页面、限流提示),根据返回内容调整请求逻辑即可。
优化建议
  • 推荐使用cURL扩展代替file_get_contents发起远程请求,cURL支持超时设置、自定义请求头、错误信息获取等能力,容错性和可控性更高。
  • 增加接口请求失败的降级处理,避免单个接口故障导致整个页面报错无输出。

内容的提问来源于stack exchange,提问作者iVA Enterprises

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.11 11:51:00