我有一个网站使用file_get_contents来访问每个请求的地理位置API。这个远程API有时会开始出现504/502错误,可能是由于问题结束。问题是这会导致我的网站也出现故障 - 有没有办法创建一个后备,这样如果远程站点开始超时,它会忽略它并加载页面呢?
这是我的代码:
$geoData = unserialize(file_get_contents('http://www.geoplugin.net/php.gp?ip=' . $_SERVER['REMOTE_ADDR']));
答案 0 :(得分:0)
@$geoData = unserialize(file_get_contents('http://www.geoplugin.net/php.gp?ip=' . $_SERVER['REMOTE_ADDR']));
这将忽略该行抛出的任何错误,并继续。
请记住,您必须检查$ geoData是否存在:
if($geoData){
// code
}
答案 1 :(得分:0)
我明白,这个答案可能不受欢迎,但我们走了:
在每个请求上调用地理位置API根本不是一个好主意。这只不过是浪费资源 - 我认为在会话期间将IP的geoinfo视为常量是完全可以接受的。
我的建议是将geoinfo存储在会话中,并异步填充它 - 如果你不可能在服务器上使用异步PHP,请使用AJAX调用,并使用客户端错误处理程序"重试并忽略"。
如果您没有会话基础结构,则可以使用本地缓存表,该表再次异步填充并具有某种到期机制。
这样,每当geoinfo网站消失时,您的应用就会保持正常状态,而不会使用geoinfo组件。