我正在为我的社交网络编写PHP代码,我打算做的是用户注册或个人资料更新 我会拿那些他们输入的邮政编码并使用雅虎从那里的邮政编码中查找格子和逻辑 然后我将这些值保存到用户mysql表中,稍后将用于查找位于X量内的用户 距他们几英里。
到目前为止,这是我的代码,以便在存储到DB
之前获取此信息<?PHP
function yahoo_geo($location) {
$q = 'http://api.local.yahoo.com/MapsService/V1/geocode';
q .= '?appid=rlerdorf&location='.rawurlencode($location);
echo $q;
libxml_use_internal_errors(true);
$xml = simplexml_load_file($q);
if(!is_object($xml)) return false;
$ret['precision'] = (string)$xml->Result['precision'];
foreach($xml->Result->children() as $key=>$val) {
if(strlen($val)){
$ret[(string)$key] = (string)$val;
}
return $ret;
}
$_REQUEST['location'] = 32744; // my zip code
$a = yahoo_geo($_REQUEST['location']);
// set retunred data to some variables for storage into MySQL
$latitude = $a[Latitude];
$longitude = $a[Longitude];
// MySQL code will go here
// Output for demo
echo 'Lattitude' .$latitude. '<BR><BR>';
echo 'Longitude' .$longitude. '<BR><BR>';
?>
除非很长,否则效果很好。和拉特。未找到它向浏览器返回错误
Warning: simplexml_load_file(http://api.local.yahoo.com/MapsService/V1/geocode?appid=rlerdorf&location=some non zipcode) [function.simplexml-load-file]: failed to open stream: HTTP request failed! HTTP/1.1 400 Bad Request in C:\webserver\htdocs\test\geolocation\index.php on line 16
请注意;我可以确保zipcode只是数字,但我宁愿没有,因为雅虎也会让我搜索其他字段,所以如果用户没有输入邮政编码我将使它使用一个城市或州甚至国家更糟糕因此每个用户都应该有某种经度和纬度。保存
是否有一种避免错误显示的好方法,甚至更好的方法是检测id是否有错误,如果发生错误,我可以为该用户插入默认值?
答案 0 :(得分:1)
不完全确定您的问题是什么,但我认为您正在寻找error control operator @
xml = @simplexml_load_file($q);
您的函数将正常返回false。 您需要稍后检查(并添加一些引号):
if (!$a)
{
// Do something
}
else
{
$latitude = $a['Latitude'];
$longitude = $a['Longitude'];
}
答案 1 :(得分:1)
使用@
运算符:
@
某处出现错误,它仍会显示给用户。另一种解决方案是在脚本开头使用类似的东西,当你在生产服务器上时:
ini_set('display_errors', 'Off');
这样,即使在你没有想到的情况下,也没有向最终用户显示错误(他们不需要看到那些,也可能不会理解) ;并且很容易在开发机器上显示所有错误:只是在线评论; - )
注意:在生产中,如果您可以按需设置配置,则可以将错误记录到文件中;这样,您可以检查这些,而不是显示它们。