php file_get_contents() 以有效的 url 返回 false
php file_get_contents() returning false with a valid url
我目前正在研究地理编码 php 函数,使用 google 地图 API。奇怪的是,我认为 file_get_contents() returns bool(false) 而我使用的 url 编码正确。
在我的浏览器中,当我测试代码时,页面加载时间很长,而且地理编码不起作用(当然,考虑到 API 没有给我什么我要)。
我也试过用curl,目前没有成功。
如果有人能帮助我,那就太好了!
非常感谢。
代码:
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;
}
}
更新:问题确实是我在代理后面。我用另一个网络测试过,它工作正常。
但是,您对我 return 以及我如何测试成功的回答也非常好,并且将帮助我改进代码。
非常感谢!
看看if
声明:
if(!gc_geocode($addr)){
echo "false <br/>";
}
这意味着如果 gc_geocode($addr)
return 是 false
或 null
,则此语句将回显 "false".
但是,您实际上从未从该函数中 return 任何东西,所以一旦成功,它就是 returning null
:
$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($lati && $longi){
echo "(" . $lati . ", " . $longi . ")"; //ECHO isn't RETURN
/* You should return something here, e.g. return true */
} else {
echo "data not complete <br/>";
return false;
}
} else {
echo "status not ok <br/>";
return false;
}
或者,您可以将 if
语句更改为仅在函数 returns false
:
时触发
if(gc_geocode($addr)===false){
//...
当你没有 return 任何功能 returns null
.
只需使用它:
if(!is_null(gc_geocode($addr))) {
echo "false <br/>";
}
或者:
if(gc_geocode($addr) === false) {
echo "false <br/>";
}
以上函数 gc_geocode() 在我的系统上正常工作,没有任何额外负载。您已调用 gc_geocode () 它 returns 您的纬度、长度是正确的,现在您已检查
if(!gc_geocode($addr)){
echo "false <br/>";
}
使用
if($responce=gc_geocode($addr)){
echo $responce;
}
else{
echo "false <br/>";
}
问题是我使用的是代理。代码正确。
要检查您和 Internet 之间是否有代理,您必须了解网络的基础结构。如果您在学校或公司网络中工作,很可能会使用代理来保护本地网络。
如果您不知道答案,询问您的网络管理员。
如果您的网络中没有声明的代理,仍然有可能存在透明代理。但是,正如该问题的公认答案所述:https://superuser.com/questions/505772/how-can-i-find-out-if-there-is-a-proxy-between-myself-and-the-internet-if-there
If it's a transparent proxy, you won't be able to detect it on the client PC.
一些网站也提供一些代理检测器,但我不知道那里提供的信息有多相关。这里有两个例子:
我目前正在研究地理编码 php 函数,使用 google 地图 API。奇怪的是,我认为 file_get_contents() returns bool(false) 而我使用的 url 编码正确。
在我的浏览器中,当我测试代码时,页面加载时间很长,而且地理编码不起作用(当然,考虑到 API 没有给我什么我要)。
我也试过用curl,目前没有成功。
如果有人能帮助我,那就太好了!
非常感谢。
代码:
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;
}
}
更新:问题确实是我在代理后面。我用另一个网络测试过,它工作正常。 但是,您对我 return 以及我如何测试成功的回答也非常好,并且将帮助我改进代码。
非常感谢!
看看if
声明:
if(!gc_geocode($addr)){
echo "false <br/>";
}
这意味着如果 gc_geocode($addr)
return 是 false
或 null
,则此语句将回显 "false".
但是,您实际上从未从该函数中 return 任何东西,所以一旦成功,它就是 returning null
:
$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($lati && $longi){
echo "(" . $lati . ", " . $longi . ")"; //ECHO isn't RETURN
/* You should return something here, e.g. return true */
} else {
echo "data not complete <br/>";
return false;
}
} else {
echo "status not ok <br/>";
return false;
}
或者,您可以将 if
语句更改为仅在函数 returns false
:
if(gc_geocode($addr)===false){
//...
当你没有 return 任何功能 returns null
.
只需使用它:
if(!is_null(gc_geocode($addr))) {
echo "false <br/>";
}
或者:
if(gc_geocode($addr) === false) {
echo "false <br/>";
}
以上函数 gc_geocode() 在我的系统上正常工作,没有任何额外负载。您已调用 gc_geocode () 它 returns 您的纬度、长度是正确的,现在您已检查
if(!gc_geocode($addr)){
echo "false <br/>";
}
使用
if($responce=gc_geocode($addr)){
echo $responce;
}
else{
echo "false <br/>";
}
问题是我使用的是代理。代码正确。
要检查您和 Internet 之间是否有代理,您必须了解网络的基础结构。如果您在学校或公司网络中工作,很可能会使用代理来保护本地网络。 如果您不知道答案,询问您的网络管理员。
如果您的网络中没有声明的代理,仍然有可能存在透明代理。但是,正如该问题的公认答案所述:https://superuser.com/questions/505772/how-can-i-find-out-if-there-is-a-proxy-between-myself-and-the-internet-if-there
If it's a transparent proxy, you won't be able to detect it on the client PC.
一些网站也提供一些代理检测器,但我不知道那里提供的信息有多相关。这里有两个例子: