2012-04-15 117 views
1

我使用外部源来获取用户的位置以访问我的网站,以便我可以自定义该位置的位置,但是我使用的外部源有时可能非常缓慢,因此会减慢我的速度网站下来我得到的外部数据使用cURL和我已经实现了一个超时功能curl_setopt($ch,CURLOPT_TIMEOUT,1000);但一旦超时已在页面中停止加载和一半的页面丢失。在设置时间后停止脚本执行

这是脚本是用在我的网站

$i = 1; 
$geoplugin = new geoPlugin(); 
$geoplugin->locate(); 
if(empty($_SESSION['country'])) { 
    $conchk = $geoplugin->countryName; 
    $_SESSION['country'] = $conchk; 
} 
else { $conchk = $_SESSION['country']; } 
if(empty($conchk)) {$countrygeo = "NULL_CONT";} else {$countrygeo = $conchk;} 
//$countrygeo = "Spain"; 
$country_find = mysql_query("SELECT * FROM country_list 
    WHERE country='$countrygeo' LIMIT 1"); 
while($row_cou = mysql_fetch_array($country_find)) { 
    $rowcov = $row_cou[1]; 
    //Geo-location default! 
    print "<option selected value=\"$rowcov\">$rowcov</option>\n"; 
    $kvar = 1; 
} 
//finish first while loop! 
//if we cant find the geo-country in the list print the whole table! 
$country_full_list_print = mysql_query("SELECT * FROM country_list 
    ORDER BY country ASC"); 
while($row_full = mysql_fetch_array($country_full_list_print)) { 
    if(($row_full[1] == "United Kingdom") && ($i == 1) && (empty($kvar))) { 
    print "<option selected value=\"$row_full[1]\">$row_full[1]</option>\n"; $i++; } 
    //always print uk as default if no results. 
elseif ($row_full[1] == $rowcov) { } 
else { 
    print "<option value=\"$row_full[1]\">$row_full[1]</option>\n"; } //this is the default print! 
} //close while loop and if num_rows less than 1. 

如果任何人有任何想法如何停止$ geoplugin但继续加载这将是大加赞赏的页面。

+0

尝试例外循环。 http://nz.php.net/exceptions – 2012-04-15 19:45:31

+0

@Dagon:hehe,php.net透露你的位置,而不需要访问个人资料:-) – zerkms 2012-04-15 23:17:39

回答

0

唯一不错的解决方案就是使用Javascript:将您调用的部分移动到外部资源中,并转移到另一个脚本中,并尽快用AJAX调用它。通过这种方式,您可以对该单独的脚本强加一个严格的时间限制,如果超出范围,则不存在任何问题:AJAX请求将失败,但您可以优雅地处理,并且不会影响页面的其余部分。

您应该已经这样做了,因为即使缓慢的外部响应不会让您的页面不完整,仍然会使您的页面看起来有任何延迟。