2012-04-15 9 views
1

外部ソースを使用して自分のウェブサイトへのユーザーの所在地を取得することができますが、私が使用している外部ソースは非常に遅く、サイトダウン私はcURLを使用して外部データを取得し、私はタイムアウト機能を実装しましたcurl_setopt($ch,CURLOPT_TIMEOUT,1000);しかし、一度タイムアウトは、ページの読み込みを停止し、ページの半分が欠落しています。設定した時間後にスクリプトを停止する

これは、スクリプトは誰が$ geopluginを停止するが、それははるかに高く評価されるだろうページをロードし続けるためにどのように任意のアイデアを持っている場合は、私のウェブサイト上で

$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. 

を使用です。

+0

例外ループを試してください。 http://nz.php.net/exceptions –

+0

@ダゴン:hehe、php.netはあなたのプロフィールを訪問する必要なくあなたの場所を公開します:-) – zerkms

答えて

0

これに対する唯一の良い解決策は、JavaScriptを使用することです。外部リソースに呼び出した部分を別のスクリプトに移動し、できるだけ早くAJAXで呼び出します。こうすることで、別々のスクリプトに厳密な時間制限を課すことができます。それを越えても問題はありません:AJAXリクエストは失敗しますが、正常に処理でき、ページの残りの部分には影響しません。

遅い外部応答によってページがハーフベークされない場合でも、ページに遅延が発生するように見えるので、これは既に実行しているはずです。

関連する問題