2011-06-25 153 views
35

这似乎是一个常见的问题,但他们都不是我正在寻找的东西。如果有一个网站:PHP - 获取当前URL

www.example.com/test.php

我想拉 “test.php的”,如果它是这样的:

www.example.com/folder /folder1/test.php

我想再次拉动“test.php”,但一切似乎拉动确切的路径,而不是只是页面。有什么建议么?

+4

为什么当你不要求一个网址这个问题,“当前的URL”为主题?另外,如果有mod_rewrite强制网址www.exemple.com/test,它被重写到test.php,它是test.php还是测试你想要的? – eis

回答

43
$query = $_SERVER['PHP_SELF']; 
$path = pathinfo($query); 
$what_you_want = $path['basename']; 

瞧。

+0

非常非常感谢你! –

+0

没问题,别忘了设置为答案! :) –

+47

更短的版本:'$ what_you_want = basename($ _ SERVER ['PHP_SELF']);' – Cyclone

2
$file = $_SERVER["SCRIPT_NAME"]; 
$break = explode('/', $file); 
$pfile = $break[count($break) - 1]; 
+0

这会回到“/folder1/folder2/test.php” –

+0

@Howdy_McGee:你确定吗? '$ pfile'应该只保存'test.php'。 –

+0

@Howdy_McGee经过测试,它适用于我: http://localhost/test1/test2/file.php打印“file.php” –

40

这将让您所请求的文件名(基于调用,而不是真正的文件的位置的URL - 万一你正在使用mod_rewrite):

$filename = basename($_SERVER['REQUEST_URI']); 

对于既http://www.example.com/testing01.phphttp://www.example.com/x/y/z/testing01.php会给你:

testing01.php 
+4

这比接受的答案+1好两倍。 –

+1

它与最上面的答案大致相同,但最常见的答案是更多信息用于分解IMO –

+3

@Howdy_McGee:我不同意。基本的区别是我们真正展现的。你问到“_Getting Current URL_”。根据[文档](http://php.net/manual/en/reserved.variables.server.php):'$ _SERVER ['REQUEST_URI']'获得“_为了访问此页面而给出的URI ;例如'/index.html'._“,而$ _SERVER ['PHP_SELF']'等于”_当前正在执行的脚本的文件名,相对于文档根目录(...)_“,这可能会或可能不等于上述情况。我解释了我的答案(在关于'mod_rewrite'的部分)中的差异。 – Tadeck