我对PHP没有经验。到目前为止,我很喜欢它,除了这段代码有时可以工作,有时根本不能工作。
我正在尝试根据一天的时间重定向。我在多个域中设置了这个脚本,每个域都有不同的时间。有时它能正常工作,有时却不能。我已经修改了我的php.ini文件以及.htaccess来尝试设置时区。我曾尝试在CST中编写我的服务器所在的时间(Hostgator),但也没有运气。我应该注意到,这里有一些HTML跟随我的代码,但它在php之外。
我不明白为什么它只是有时有效。我试过多次清除浏览器缓存,但从来没有帮助。在这段代码中,它应该只在5:47 PM和6:43 PM之间显示它下面的html,并在所有其他时间重定向,对吗?是某种缓存问题吗?是脚本被存储,然后不被执行,当我访问多个网站在一排?非常感谢任何帮助。
最好的情况是这只发生在我身上,因为我访问的网站太多,以确保脚本正常工作。这可能吗?
<?php
date_default_timezone_set('America/Los_Angeles');
$hour = date("G");
$min = date("i");
if(($hour >= "0" and $min >= "00") and ($hour <="17" and $min <= "47"))
{
header('Location: http://mysite.php');
exit();
}
elseif(($hour >= "18" and $min >= "43") and ($hour <="23" and $min <= "59"))
{
header('Location: http://mysite.php');
exit();
}
?>
这里是缩短代码,我将时间转换为军事时间。如果军事时间小于1747或大于1843 -它将重定向,否则将显示HTML内容
date_default_timezone_set('America/Toronto');
$hour = date("G");
$min = date("i");
$milTime = $hour . $min ;
if($milTime < 1747 || $milTime > 1843)
{
header('Location: http://stackoverflow.com/questions/');
echo "Redirect";
exit();
}
echo "<h1>$milTime Show HTML Content</h1>";
尝试使用intval()
获取实际整数并进行比较:
date_default_timezone_set('America/Los_Angeles');
$hour = intval( date("G"), 10 );
$min = intval( date("i"), 10 );
if(( $hour >= 0 and $min >= 0 ) and ( $hour <= 17 and $min <= 47 ))
{
header('Location: http://mysite.php');
exit();
}
elseif (( $hour >= 18 and $min >= 43 ) and ( $hour <= 23 and $min <= 59 ))
{
header('Location: http://mysite.php');
exit();
}
你所做的是比较字符串,这是一个逐个字符的比较(它们在ASCII表中的顺序)。因此,例如,如果比较"13" > "10"
,这是正确的,因为"1" == "1"
(等于,继续)和"3" > "1"
(为真,返回真)。
但是如果你比较"098" > "100"
呢?"0" > "1"
(false,返回false)。显然它不能满足您的目的,因为098 = 98 实际上小于100。
EDIT:正如@DCoder正确提到的,字符串首先被转换为数字(整数),然后进行比较。我强烈建议确保将它们显式地转换为数字,然后进行比较,以避免在处理字符串时可能出现的问题。