正如已经指出的那样,header()
只会触发 HTTP 标头并忘记,因此使用 PHP 您将无法轻松实现重试机制。
但是,您要解决的根本问题是什么?如果您要重定向到的合作伙伴网站过载,以至于有时只会在第二次或第三次尝试时做出反应:严重的是,您应该使该服务器更可靠地工作。
另一方面,如果您只是在寻找一种方法来发现其他服务器可能的停机时间并相应地通知您的用户,您可以在代码中添加快速的服务器到服务器检查。如果其他服务器出现故障,您可以重定向到不同的页面并道歉或提供重试链接。
查看此答案以了解如何 ping 服务器以了解它是否已启动。
粗略的解决方案可能如下所示:
<?php
$url = 'http://anotherwebsite.com';
if(pingDomain($url) != -1) {
header('Location: ' . $url);
} else {
header('Location: sorry_retry_later.html');
}
// Ping function, see
// https://tournasdimitrios1.wordpress.com/2010/10/15/check-your-server-status-a-basic-ping-with-php/
function pingDomain($domain){
$starttime = microtime(true);
$file = fsockopen ($domain, 80, $errno, $errstr, 10);
$stoptime = microtime(true);
$status = 0;
if (!$file) $status = -1; // Site is down
else {
fclose($file);
$status = ($stoptime - $starttime) * 1000;
$status = floor($status);
}
return $status;
}