我有这段代码,它应该获得当前日期,将其与设置的结束日期进行比较,并在当前日期超过结束日期时进行重定向。每当我将$promoend设置为过去的日期时,我就会陷入重定向循环。
if()块应该只在促销已经结束并且我还没有在close .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");
}
知道为什么这是一个循环吗?
如果指针('closed.php')位于干草堆($_SERVER['PHP_SELF'])的开头,strpos可以返回0。因为你没有使用严格的比较运算符,所以PHP会将其处理为'false'。
必须使用严格比较运算符来检查这种情况:
if ($promoend && (strpos(...) !== FALSE)) {
header(...);
}
if ($promoend && !strpos($_SERVER["PHP_SELF"],"closed.php")) {
header("Location: ".$environment->root."/closed.php");
}
...should probably be...
if ($promoend && strpos($_SERVER["PHP_SELF"],"closed.php")!==true) {
header("Location: ".$environment->root."/closed.php");
}
因为strpos()并不总是返回一个布尔值,所以你必须使用PHP等价操作符
假设你的日期计算是正确的,原因是,strpos返回0,因为你在PHP_SELF中寻找的字符串位于0位置。
你必须使用!== "而不是!val因为0和"和NULL是一样的