类似的东西:
/directory/a/b - /directory/ = a/b
是否可以轻松完成此操作?
答案 0 :(得分:1)
由于您正在使用路径,因此平台敏感度非常重要; Windows具有与大多数其他平台不同的路径分隔符,并且要编写可重用的代码,您无法对平台进行缓冲。
PHP有一些处理路径的函数。如果你被交给一个非常奇怪的路径,如~foo/bar//bitty/../index.php
,请使用realpath
为你清理它。
$path = realpath("~foo/bar//bitty/../index.php");
/* output: /home/foo/bar/index.php */
其他功能可以帮助您 - 例如,要自己获取文件名的路径部分,请使用dirname
:
print dirname($path);
/* output: /home/foo/bar */
一旦你拥有了它,拆分分隔符并做你想做的任何工作。真正的诀窍是让PHP担心路径中的所有奇怪之处,然后分别处理每个部分。同时查看pathinfo
和basename
。我认为这就是你要求的,而不是如何做一些愚蠢的字符串替换。
不要忘记不允许注射到您的应用程序!使用来自Web输入的路径是危险的。永远不要相信用户输入。
答案 1 :(得分:0)
echo str_replace("/directory/","","/directory/a/b");
要在其他类型的字符串上使用它,你的完整字符串会出现在第三个参数中,而无论你“减去”的是第一个参数。
答案 2 :(得分:0)
使用dirname()函数和一些字符串,你可以剪切原始路径并获得碎片。
<?php
// from: http://php.net/manual/en/function.dirname.php
$path = "/dirname/a/b";
$dir = dirname(dirname($path));
echo "dir at front=$dir\n";
$len = strlen($dir);
$dirname = substr ( $path, 0, $len+1 );
echo "dirname=$dirname\n";
$last_2 = substr ( $path, $len+1 );
echo "last_2=$last_2\n";
?>
结果
$ php x.php
dir at front=/dirname
dirname=/dirname/
last_2=a/b