2012-08-03 267 views
2

我寫了這個代碼,訪問者重定向到我的筆記本電腦(動態IP)託管服務器第二個重定向如果第一個重定向失敗

我使用第二個PHP腳本在數據庫中更新IP

<?php 
    //redirect.php 
    $con = mysql_connect($db_hostname,$db_admin,$db_password); 
    if (!$con){ 
     echo "Couldn connect to server !!"; 
    } 
    $sql ="select ip from $db_name.redirect WHERE id=0"; 
    $result = mysql_query($sql,$con); 
    $ip = "error.php"; 
    while($row = mysql_fetch_array($result)){ 
    $ip=$row[0]; 
    } 
    //Header("HTTP/1.1 301 Moved Permanently"); 
    $forward = "Location: http://$ip"; 
    header($forward) ; 
    //Header( "Location: errorMsg.php"); 
    ?> 

但我的筆記本電腦服務器只有很少, 我想知道是否有可能重定向到errorMsg.php如果第一次重定向失敗?

也是用jsp可以實現的嗎?

+0

總之,沒有。一旦你發送了重定向,你的客戶端連接(可能)就會被放棄,你當然無法控制它的未來行爲。這是HTTP協議本身的限制,與服務器端語言無關。你需要一個反向代理來做這樣的事情。或者,我想,可以通過提供一個帶有一點Javascript的HTML文檔,並立即重定向到URL 1和一個定時器重定向到URL 2來完成,如果頁面在n秒後仍然在瀏覽器中加載 - 但是那樣會不會有任何可靠的。 – DaveRandom 2012-08-03 13:49:52

回答

0

我想你可以ping IP,如果它沒有響應,那麼使用errorMsg.php。試試這個:

$dsn = 'mysql:dbname='.$db_name.';host='.$db_hostname; 

try 
{ 
     $dbh = new PDO($dsn,$db_admin,$db_password); 
} catch(PDOEXception $e) { 
     echo 'Couldn connect to server !!'; 
} 

$sql = 'SELECT ip FROM redirect'; 
$sth = $dbh->prepare($sql); 
$sth->execute(); 
$ip = $sth->fetchColumn(); 
$location = 'errorMsg.php'; 
if($ip && $fp=fsockopen($ip,80,$en,$es,1)) { 
     fclose($fp); 
     $location = 'http://'.$ip; 
} 

header('Location: '.$location); 

這裏假設你有一些方法可以用你想要的IP更新數據庫。

PS - 我推薦PDO,如果它不明顯。

+0

謝謝,ping工作完美。 但我沒有得到的是你爲什麼建議PDO。你能詳細說明嗎? – Soumy 2012-08-06 09:45:32