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