if (file_exists($cachefile) && (time() - $cachetime < filemtime($cachefile)) && $_SERVER['REQUEST_URI'] != "login" || "thankyou" || "confirm")
这段代码应该运行吗,运算符明智且语法明智吗?
答案 0 :(得分:8)
这部分不会像您(可能)那样有效:
$_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"))
答案 1 :(得分:1)
即使它确实存在,我也会为这种“复杂”条件创建一种方法。
方法体看起来像这样:
if(!condition1)
return false;
if(!condition2)
return false;
if(!conditionN)
return false;
return true;
编辑: 原因只是可读性,您可以恰当地命名这些条件方法,并且方法本身比非常长的if语句更具可读性。