php文件_get_contents()返回false和有效url
我目前正在使用GoogleMapsAPI开发一个地理编码php函数。奇怪的是,file_get_contents()返回bool(false),而我使用的url是正确编码的 在我的浏览器中,当我测试代码时,页面需要很长时间才能加载,地理编码也不起作用(当然,考虑到API不能满足我的需求) 我也试着使用curl,到目前为止没有成功 如果有人能帮我,那太好了 非常感谢 守则:php文件_get_contents()返回false和有效url,php,api,google-maps,geocoding,Php,Api,Google Maps,Geocoding,我目前正在使用GoogleMapsAPI开发一个地理编码php函数。奇怪的是,file_get_contents()返回bool(false),而我使用的url是正确编码的 在我的浏览器中,当我测试代码时,页面需要很长时间才能加载,地理编码也不起作用(当然,考虑到API不能满足我的需求) 我也试着使用curl,到目前为止没有成功 如果有人能帮我,那太好了 非常感谢 守则: function test_geocoding2(){ $addr = "14 Boulevard Vauban,
function test_geocoding2(){
$addr = "14 Boulevard Vauban, 26000 Valence";
if(!gc_geocode($addr)){
echo "false <br/>";
}
}
function gc_geocode($address){
$address = urlencode($address);
$url = "http://maps.google.com/maps/api/geocode/json?address={$address}";
$resp_json = file_get_contents($url);
$resp = json_decode($resp_json, true);
if($resp['status']=='OK'){
$lati = $resp['results'][0]['geometry']['location']['lat'];
$longi = $resp['results'][0]['geometry']['location']['lng'];
if($lati && $longi){
echo "(" . $lati . ", " . $longi . ")";
}else{
echo "data not complete <br/>";
return false;
}
}else{
echo "status not ok <br/>";
return false;
}
}
功能测试\u地理编码2(){
$addr=“沃邦大道14号,26000瓦伦斯”;
如果(!gc_地理编码($addr)){
回声“假
”;
}
}
函数gc\u地理编码($address){
$address=urlencode($address);
$url=”http://maps.google.com/maps/api/geocode/json?address={$address}”;
$resp_json=file_get_contents($url);
$resp=json_decode($resp_json,true);
如果($resp['status']=='OK'){
$lati=$resp['results'][0]['geometry']['location']['lat'];
$longi=$resp['results'][0]['geometry']['location']['lng'];
如果($lati&&$longi){
回声“(“$lati.”,“$longi.”);
}否则{
回显“数据不完整
”;
返回false;
}
}否则{
回显“状态不正常
”;
返回false;
}
}
更新:问题确实是我在一个代理背后。我用另一个网络进行了测试,它工作正常。
但是,您对我返回的内容以及如何测试成功的回答也非常好,这将帮助我改进代码
非常感谢 看看
if
语句:
if(!gc_geocode($addr)){
echo "false <br/>";
}
或者,您可以将if
语句更改为仅在函数返回false
时激发:
if(gc_geocode($addr)===false){
//...
不返回任何内容时,函数返回
null
就用这个:
if(!is_null(gc_geocode($addr))) {
echo "false <br/>";
}
if(!is_null(gc_地理编码($addr))){
回声“假
”;
}
或:
if(gc\u地理编码($addr)==false){
回声“假
”;
}
以上函数gc\u geocode()在我的系统上正常工作,没有任何额外负载。您已经调用了gc_geocode(),它会返回lat,long,这是正确的,现在您已经完成了检查
if(!gc_geocode($addr)){
echo "false <br/>";
}
if(!gc_地理编码($addr)){
回声“假
”;
}
使用
if($responce=gc_geocode($addr)){
echo $responce;
}
else{
echo "false <br/>";
}
if($response=gc\u地理编码($addr)){
回声$responce;
}
否则{
回声“假
”;
}
问题在于我使用的是代理。代码是正确的
要检查您与Internet之间是否存在代理,您必须了解网络的基础结构。如果您在学校或公司网络工作,很可能会使用代理来保护本地网络。
如果您不知道答案,请询问网络管理员
如果网络中没有声明的代理,仍然可能存在透明代理。然而,正如对这一问题的公认答案所述:
如果它是透明代理,您将无法在客户端PC上检测到它
一些网站也提供了一些代理检测器,尽管我不知道那里提供的信息有多重要。以下是两个例子:
您很可能正在使用internet代理。在函数
gc\u geocode()
中,除了false
之外,您永远不会返回任何内容。。。如果(gc_geocode($addr)==false),您可以echo
其他内容,但永远不会返回true
afterwardsTryif(gc_geocode($addr)==false)
if(!gc_geocode($addr)){
echo "false <br/>";
}
if($responce=gc_geocode($addr)){
echo $responce;
}
else{
echo "false <br/>";
}