为什么这个PHP header()重定向会陷入无限循环?

1 php redirect infinite-loop

我有这段代码应该获取当前日期,将其汇总到设定的结束日期,如果当前日期超过结束日期则重定向.每当我将$ promoend设置为过去的日期时,我就会陷入重定向循环.

if()块只应在促销结束且我不在closed.php页面上时重定向.

$currentdate = new DateTime("now");
$promoend = new DateTime("11/01/2010 00:00:00");
$promoend = $currentdate->diff($promoend)->invert;
if ($promoend && !strpos($_SERVER["PHP_SELF"],"closed.php")) {
    header("Location: ".$environment->root."/closed.php");
}
Run Code Online (Sandbox Code Playgroud)

知道为什么会陷入循环吗?

Mar*_*c B 5

如果针('closed.php')位于haystack的开头($ _SERVER ['PHP_SELF']),strpos可以返回0.这将被PHP视为'false',因为您没有使用严格的比较运算符.

必须使用严格比较运算符来检查这种情况:

if ($promoend && (strpos(...) !== FALSE)) {
   header(...);
}
Run Code Online (Sandbox Code Playgroud)