第二个重定向如果第一个重定向失败

第二个重定向如果第一个重定向失败

问题描述:

我写了这个代码,访问者重定向到我的笔记本电脑(动态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

我想你可以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