if (file_exists($cachefile) && (time() - $cachetime < filemtime($cachefile)) && $_SERVER['REQUEST_URI'] != "login" || "thankyou" || "confirm")
此代码是否应该工作,运营商明智和语法明智?如果我的if语句有效,它的结构是否正确?
if (file_exists($cachefile) && (time() - $cachetime < filemtime($cachefile)) && $_SERVER['REQUEST_URI'] != "login" || "thankyou" || "confirm")
此代码是否应该工作,运营商明智和语法明智?如果我的if语句有效,它的结构是否正确?
这部分将无法正常工作,你(可能)想:
$_SERVER['REQUEST_URI'] != "login" || "thankyou" || "confirm"
首先,REQUEST_URI
将永远不等于任何值 - 这将有至少一个额外的/
。如果您的脚本被命名为test.php
,那么REQUEST_URI将至少包含/test.php
(请参阅下文中可能包含的其他内容)。查看REQUEST_URI
变量以了解它的结构。
另外,REQUEST_URI
在这里很危险:它将包含任何其他查询字符串,因此可能会通过向URL添加任意?name=value
来混淆比较。
做一个phpinfo()
找到比REQUEST_URI更适合的东西,例如, SCRIPT_NAME
。其次,在完成比较之前,您正在执行的“或”操作将应用于值。
你可能想是这样的:
!in_array($_SERVER['SCRIPT_NAME'],
array("/login.php", "/thankyou.php", "/confirm.php"))
即使是这样,我想创建一个方法,这种“复杂”的条件。
方法的身体会是这个样子:
if(!condition1)
return false;
if(!condition2)
return false;
if(!conditionN)
return false;
return true;
编辑: 原因只是readbility,你能说出适当的条件方法和方法自理方式比一个更可读的很长的if语句。
$ name = basename($ _ SERVER ['REQUEST_URI']); $ name_array = explode('。',$ name); 是我的代码。 啊等等,所以应该是$ name_array [0]来代替。傻我。 – Sam 2010-06-06 11:03:18
@Sam我想这也是一样。然而,'||'比较将不会以任何方式工作,显示的'in_array()'方法将会。或者,您必须对每个登录名执行'!='比较,谢谢,并确认。 – 2010-06-06 11:10:33
啊,我明白了。感谢您的快速响应,它工作:)。 – Sam 2010-06-06 11:14:33