2010-06-11 37 views
2

我得到一個用戶文件的文件路徑,我想確保這個路徑是有效的現有用戶文件,而不是僞造或系統文件,或者類似的東西。PHP:文件存在並位於某個子目錄中

我知道我可以使用file_exists檢查它的存在,但我不知道我應該如何確保文件在某個子目錄...

回答

1

你應該知道的硬鏈接和符號鏈接。如果您要更改文件,請執行統計以檢查它是否是常規文件並且其節點數是1.

$subdirToCheck = "/home/mysubdir/"; 
$file = "relativepath/userfile"; 
$absfile = realpath($file); 
if ($absfile !== FALSE && file_exists($absfile) && 
     substr($absfile, 0, strlen($subdirToCheck)) == $subdirToCheck) { 
    $ls = lstat($absfile); 
    if (is_link($ls) || $ls["nlink"] > 1) { 
     //abort 
    } 
    else { 
     //do stuff 
    } 
} 
+0

不錯。似乎您可以跳過file_exists:* realpath()在失敗時返回FALSE,例如,如果文件不存在。* – Svish 2010-06-11 16:09:46

+0

也不確定在我的情況下鏈接檢查是否必要,因爲它們必須先在該目錄中創建? – Svish 2010-06-11 16:12:39

+0

@Svish是的,但看到更新日誌。至於你的另一點,如果你可以保證目錄及其子目錄不包含符號鏈接,你可以跳過檢查。 – Artefacto 2010-06-11 16:16:29

相關問題