我有这段代码应该获取当前日期,将其汇总到设定的结束日期,如果当前日期超过结束日期则重定向。每当我将$ 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");
}
知道为什么会陷入循环吗?
答案 0 :(得分:5)
strpos可以返回0。这将被PHP视为'false',因为您没有使用严格的比较运算符。
你必须使用严格比较运算符来检查这种情况:
if ($promoend && (strpos(...) !== FALSE)) {
header(...);
}
答案 1 :(得分:1)
if ($promoend && !strpos($_SERVER["PHP_SELF"],"closed.php")) {
header("Location: ".$environment->root."/closed.php");
}
......应该是......
if ($promoend && strpos($_SERVER["PHP_SELF"],"closed.php")!==true) {
header("Location: ".$environment->root."/closed.php");
}
因为strpos()并不总是返回一个布尔值,所以你必须使用PHP等价运算符。
答案 2 :(得分:0)
假设您的日期计算是正确的,原因是,strpos返回0,因为您在PHP_SELF中寻找的字符串位于0位置。
你必须使用!==“”而不仅仅是!val因为0与“”是相同的“