设定时间后停止脚本执行

时间:2012-04-15 19:26:45

标签: php

我使用外部来源获取用户到我网站的位置,以便我可以自定义该网站的位置,但我使用的外部源有时可能会非常慢,因此减慢了我的网站,我得到外部数据使用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但继续加载页面,我们将非常感激。

1 个答案:

答案 0 :(得分:0)

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

你应该这样做,因为即使慢速外部响应没有让你的页面半成品,它仍然会使你的页面看起来对任何延迟负责。