使用PHP查找当前文件或目录
有一个头文件可以在站点上打印出标准菜单是一个好主意,并且从长远来看可以节省您的时间,因为您只需编辑一个文件即可更改菜单上的项目。但是,如果只希望在加载特定页面时显示菜单或子菜单怎么办?这是一个常见问题,所有PHP程序员都会在某个时候碰到您要找到哪个页面。
PHP$_SERVER超全局数组具有三个感兴趣的项,可用于查找当前页面。它们是PHP_SELF,REQUEST_URI和SCRIPT_NAME,它们似乎都具有相同的值,但是存在一些细微而重要的差异。以下是其值(在右侧)和原始URL(在左侧)的一些示例。
PHP_SELF
test.php = test.php /example/ = /example/index.php /example/test.php = /example/test.php /example/test.php?id=123 = /example/test.php /example/test.php/test/123 = /example/test.php/test/123
REQUEST_URI
test.php = test.php /example/ = /example/ /example/test.php = /example/test.php /example/test.php?id=123 = /example/test.php?id=123 /example/test.php/test/123 = /example/test.php/test/123
SCRIPT_NAME
test.php = test.php /example/ = /example/index.php /example/test.php = /example/test.php /example/test.php?id=123 = /example/test.php /example/test.php/test/123 = /example/test.php
因此,从这些测试中我们可以说,SCRIPT_NAME可能是获取运行我们正在查看的代码的文件名的最佳选择。我们可以这样获得输出。
$currentFile=$_SERVER["SCRIPT_NAME"];
接下来,您需要将路径的各个部分提取到一个数组中并挑选出最后一项。这将是文件名。
$currentFile = $_SERVER["SCRIPT_NAME"]; $parts = explode('/', $currentFile); $filename = $parts[count($parts) - 1];
我在这个主题上似乎有些变化,但是使用SCRIPT_NAME似乎是最可靠的方法。需要注意的一件事是,您可能会发现一些服务器设置根本不存在SCRIPT_NAME。在这种情况下,我将使用PHP_SELF,因为它是由该语言实现的,并且将始终存在。
要找到当前目录,您只需要查看数组的其余部分。因此,如果我们正在查看的文件具有以下URL。
http://www.hashbangcode.com/blog/example/test/123/test.php
然后,包含在$parts变量中的数组将包含以下内容。
[0] => [1] => blog [2] => example [3] => test [4] => 123 [5] => test.php
第一项始终为空,因为SCRIPT_NAME变量始终以斜杠开头。因此,当我们explode()在其上使用该函数时,将创建一个空白项目。可以使用以下方法轻松删除它:
unset($parts[0]);