2012-07-13 167 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