2
我得到一個用戶文件的文件路徑,我想確保這個路徑是有效的現有用戶文件,而不是僞造或系統文件,或者類似的東西。PHP:文件存在並位於某個子目錄中
我知道我可以使用file_exists檢查它的存在,但我不知道我應該如何確保文件在某個子目錄...
我得到一個用戶文件的文件路徑,我想確保這個路徑是有效的現有用戶文件,而不是僞造或系統文件,或者類似的東西。PHP:文件存在並位於某個子目錄中
我知道我可以使用file_exists檢查它的存在,但我不知道我應該如何確保文件在某個子目錄...
你應該知道的硬鏈接和符號鏈接。如果您要更改文件,請執行統計以檢查它是否是常規文件並且其節點數是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
}
}
不錯。似乎您可以跳過file_exists:* realpath()在失敗時返回FALSE,例如,如果文件不存在。* – Svish 2010-06-11 16:09:46
也不確定在我的情況下鏈接檢查是否必要,因爲它們必須先在該目錄中創建? – Svish 2010-06-11 16:12:39
@Svish是的,但看到更新日誌。至於你的另一點,如果你可以保證目錄及其子目錄不包含符號鏈接,你可以跳過檢查。 – Artefacto 2010-06-11 16:16:29