如何使用PHP获取URL的深度?

时间:2017-05-12 19:22:25

标签: php url path

我希望使用PHP回显当前页面网址的深度(或我家的目录数量)。我该怎么做?

例如,如果我在mysite.com上,输出显示" 0",如果我在mysite.com/recipes上,输出显示" 1& #34;,如果我在mysite.com/recipes/pies上,输出会显示" 2",依此类推。

我该怎么做?

我尝试简化并执行此操作,但它导出为0:

$folder_depth = substr_count($_SERVER["PHP_SELF"] , "/");
echo $folder_depth;

3 个答案:

答案 0 :(得分:2)

只是为了好玩,这是我使用PHP parse_url()及其PHP_URL_PATH返回值以及其他几个函数的廉价而又狡猾的解决方案:

$url = 'http://universeofscifi.com/content/tagged/model/battlestar_galactica.html';
echo var_dump(parse_url($url, PHP_URL_PATH));
echo count(explode('/', (parse_url($url, PHP_URL_PATH)))) - 2;

返回:

string(47) "/content/tagged/model/battlestar_galactica.html"
3

我从计数中减去2以丢弃前面的域和最后的文件,只留下目录深度计数。

答案 1 :(得分:1)

如果您没有查询字符串,则可以在/上爆炸。如果您有查询字符串,则需要先删除它,例如......

$url = preg_replace('/?.*$/','',$url);

如果你的网址前面有http://或https://,那也会搞砸它。所以删除它......

$url = preg_replace('~^https*://~','',$url);

现在,您只有url作为example.com/some/path/to/something。你可以爆炸/得到一个计数:

$a = explode('/',$url);

$ a的大小将比你想要的大1。所以,你需要减去一个:

$ depth = sizeof($ a)-1;

新问题...我只是计算了文件本身,例如example.com/links.html会出现1,而不仅仅是0.所以,在爆炸之前我需要摆脱文件名。但是......我怎么知道它是文件还是目录?这不是内置于URL规范中。例如,example.com/test可以是一个文件,也可以是一个目录(然后它会自动转到example.com/test/index.html)。您需要假设您将拥有哪些文件扩展名,并在爆炸之前删除这些文件,例如:

$url = preg_replace('~/[^/]+.(html|php|gig|png|mp3)$~','',$url);

答案 2 :(得分:0)

@kainaw,我喜欢你的回答!谢谢!

我对此进行了调整。首先,我注意到我使用了错误的PHP函数来获取我需要的URL部分。其次,我需要使用@ kaniaw的示例并获取我应该计算的URL部分,并忽略其他部分。

我还必须考虑" /"之间没有内容的网址,所以像/ word ////这样的东西仍会算作1.因此,我只计算了爆炸后的数组元素()这不是空的。

这是我的代码:

$url = $_SERVER['REQUEST_URI'];
//echo "*".$_SERVER['REQUEST_URI']."*";
//$url = preg_replace('/?.*$/','',$url);
//$url = preg_replace('~^https*://~','',$url);
//$url = preg_replace('~/[^/]+.(html|php|gig|png|mp3)$~','',$url);
$a = explode('/',$url);

$depth =count(array_filter($a));
echo $depth;

我评论了其中一些内容,因为我没有看到它们,但是上面提到过它们。

谢谢!

相关问题