2012-02-21 89 views
1

在PHP中,是否有一個函數可以執行類似於realpath()的邏輯,但對於文件系統中可能不存在的文件?很明顯,它無法解析鏈接等,但我的目標是查看用戶提供的路徑是否在某個目錄(或該目錄的子目錄)中,而不必考慮/.././我自己的路徑類型的問題。調用實型路徑將是完美的,如果它在文件不存在時不返回false。在PHP中消毒文件路徑

+1

如果它不應該返回false,它應該返回什麼? 「 – 2012-02-21 21:19:23

+1

」在您的服務器上提供路徑的「用戶」聽起來像是一個壞主意。 – 2012-02-21 21:20:16

+0

也許http://www.php.net/manual/en/function.pathinfo.php將幫助 – Kuba 2012-02-21 21:23:53

回答

0

如果你只需要刪除/../自寫功能不會那麼困難。 只需將字符串拆分爲數組,迭代數組並將值插入新數組中。如果你打一個..刪除插入新數組中的最後一個元素。然後將第二個數組合並回一個字符串。

+0

我一直在猶豫,因爲我聽說過黑客人有用於指定'。'的多字節表示的地方。人物天真地剝奪了''。字符。也許我不需要擔心PHP中的這些東西? – jmkelm08 2012-02-22 04:09:14

+0

其實,我不知道如果PHP解釋這些多字節「。」作爲目錄上傳操作。如果是這種情況,請自行嘗試一下。如果我有時間,我也會嘗試。 – Johni 2012-02-25 16:38:57

1

如果您關注的僅僅是文件嘗試:

function unrealpath($path){ 
    $rp = realpath(dirname($path)); 
    if(false === $rp) 
    return false; 
    return $rp.basename($path); 
} 

如果您對現有的目錄或沒有很好這不會工作的擔憂。