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

PHP调用Google Distance Matrix API返回空值问题求助

问题原因及解决办法

一、代码本身的问题

  • $wayTo的编码处理错误:你对$wayTo用了urldecode,但如果$wayTo原本不是URL编码后的内容,解码后会出现乱码或非法字符,导致拼接出的URL无效。浏览器直接访问用的是正确编码的地址,所以能正常请求。应该把urldecode($wayTo)改成urlencode($wayTo),和$wayFrom的处理保持一致。
  • 错误被屏蔽无法排查:你在file_get_contents前加了@符号,会把所有错误提示都屏蔽掉,根本看不到到底哪里出问题。先把@去掉,同时开启PHP错误提示,就能看到具体报错:
    ini_set('display_errors', 1);
    ini_set('error_reporting', E_ALL);
    $out = file_get_contents($url);
    

二、服务器环境的限制

  • allow_url_fopen未开启:PHP的allow_url_fopen配置如果是关闭状态,file_get_contents就没法请求外部URL。可以用phpinfo()查看这个配置,要是关着,就在php.ini里改成allow_url_fopen = On,或者找主机商帮忙开启。
  • 服务器网络限制:服务器可能有防火墙规则,阻止PHP脚本发起对外请求,或者需要走代理才能访问外部API。浏览器访问走的是你本地网络,不受服务器规则限制,所以能成功。这种情况可以找服务器管理员排查网络规则,或者换用cURL替代file_get_contents(cURL一般不受allow_url_fopen限制):
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    // 若服务器SSL验证有问题可临时关闭下面这行,正式环境建议开启
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    $out = curl_exec($ch);
    curl_close($ch);
    
  • 缺少User-Agent被拦截:Google API可能会拒绝没有User-Agent标识的请求,浏览器访问时有默认的User-Agent,而file_get_contents默认没有。可以手动添加User-Agent:
    $opts = [
        'http' => [
            'header' => "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36\r\n"
        ]
    ];
    $context = stream_context_create($opts);
    $out = file_get_contents($url, false, $context);
    

三、API密钥的限制问题

你在Google Cloud控制台可能给API密钥设置了应用限制,比如只允许特定IP或HTTP referrer访问。浏览器访问时的IP或referrer符合规则,但服务器的公网IP不在允许列表里,所以脚本请求被拒绝。去Google Cloud的API密钥设置页面,把服务器的公网IP添加到允许列表即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 09:25:02