第二个重定向如果第一个重定向失败
问题描述:
我写了这个代码,访问者重定向到我的笔记本电脑(动态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可以实现的吗?
答
我想你可以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
总之,没有。一旦你发送了重定向,你的客户端连接(可能)就会被放弃,你当然无法控制它的未来行为。这是HTTP协议本身的限制,与服务器端语言无关。你需要一个反向代理来做这样的事情。或者,我想,可以通过提供一个带有一点Javascript的HTML文档,并立即重定向到URL 1和一个定时器重定向到URL 2来完成,如果页面在n秒后仍然在浏览器中加载 - 但是那样会不会有任何可靠的。 – DaveRandom 2012-08-03 13:49:52