我的if语句是否有效,是否结构合理?

Sam*_*Sam 1 php syntax if-statement operators

if (file_exists($cachefile) && (time() - $cachetime < filemtime($cachefile)) && $_SERVER['REQUEST_URI'] != "login" || "thankyou" || "confirm") 
Run Code Online (Sandbox Code Playgroud)

如果这个代码有效,那么运算符是否明智且语法明智

Pek*_*ica 8

这部分不会像你(可能)想要的那样工作:

$_SERVER['REQUEST_URI'] != "login" || "thankyou" || "confirm"
Run Code Online (Sandbox Code Playgroud)

首先,REQUEST_URI永远不会等于任何这些值 - 它至少会有一个额外的值/.如果您的脚本已命名test.php,则REQUEST_URI将至少包含/test.php(请参阅下面的其他内容).查看REQUEST_URI变量以了解它的结构.

此外,REQUEST_URI这里是危险的:它将包含任何其他查询字符串,因此可以通过向?name=valueURL 添加任意来混淆比较.

做一个phpinfo()比REQUEST_URI更合适的东西,例如SCRIPT_NAME.

其次,在比较完成之前,您正在执行的"或"操作将应用于值.

你可能想要这样的东西:

!in_array($_SERVER['SCRIPT_NAME'], 
          array("/login.php", "/thankyou.php", "/confirm.php"))
Run Code Online (Sandbox Code Playgroud)