2012-07-13 206 views
1

我有一個文件夾路徑(例如/var/www/tester/assets/themes/default/css/)。用php遍歷目錄?

用戶可以提供到文件夾的相對路徑,例如。 layout/ie7.css會給出/var/www/tester/assets/themes/default/css/layout/ie7.css的路徑。

這工作正常,但我希望用戶能夠向上瀏覽目錄樹。

所以隨着css文件夾的路徑再次如果用戶提供../../cache/css/ie7.css我希望路徑最終爲/var/www/tester/assets/themes/default/cache/css/ie7.css

我想我可以只通過他們共同realpath() e.g:

$base = '/var/www/tester/assets/themes/default/css/'; 
$user_path = '../../cache/css/ie7.css'; 
$final_path = realpath($base.$user_path); 

但是,這只是返回false。我怎樣才能做到這一點?

+0

php是否有權打開shis文件夾?嘗試使用乾淨的路徑'/var/www/tester/assets/themes/cache/css/ie7.css',並看看你得到了什麼 – Kristian 2012-07-13 11:08:49

+1

「運行腳本必須對層次結構中的所有目錄具有可執行權限,否則實際路徑)將返回FALSE。「 - 來自文檔... – Raz 2012-07-13 11:09:13

回答

1

首先真實路徑函數還檢查給定的路徑是否存在......你確定你的路徑存在嗎?

/var/www/tester/assets/themes/default/css/../../cache/css/ie7.css 

不會結束在

/var/www/tester/assets/themes/default/cache/css/ie7.css 

你的建議,但它在

/var/www/tester/assets/themes/cache/css/ie7.css 

這是否與文件夾給定文件存在結束了?

+0

你是對的。我的路線錯了。將盡快接受。 – Hailwood 2012-07-13 11:13:00

0

只是不。像/var/www/tester/assets/themes/default/css/../../cache/css/ie7.css這樣的路徑沒有任何問題。它適用於所有操作系統和瀏覽器。

注意:您是否知道您可能會在此創建安全風險?如果用戶提供../../../../../../../etc/passwd會怎麼樣?

+0

我在錯誤的上下文中使用「用戶」。他們是我正在創建的一個php庫的用戶。由配置文件提供的路徑。沒有安全風險。 「用戶」可以寫他自己的腳本來做到這一點。好的提示,但。 – Hailwood 2012-07-14 02:19:35

+0

另外,如果多次使用它,那麼是不是會有一些(可能可以忽略,但仍有一些)必須翻譯該路徑的開銷? – Hailwood 2012-07-14 02:21:58