获取运行脚本的父目录

2022-08-30 08:14:53

在 PHP 中,获取当前正在运行的脚本的目录相对于 www 根目录的最干净方法是什么?假设我有:

$_SERVER['SCRIPT_NAME'] == '/relative/path/to/script/index.php'

或者只是:

$something_else == '/relative/path/to/script/'

我需要正确插入斜杠。你有什么建议?最好使用一个衬垫。/relative/path/to/

编辑

我需要获得一个相对于www根目录的路径,在文件系统中给我一个绝对路径,这样就不会起作用。 另一方面,在www根目录下“开始”。dirname(__FILE__)$_SERVER['SCRIPT_NAME']


答案 1

如果您的脚本位于 中,则将返回以下内容:/var/www/dir/index.php

dirname(__FILE__); // /var/www/dir

dirname( dirname(__FILE__) ); // /var/www

编辑

这是许多框架中用于确定从app_root相对路径的技术。

文件结构:

 /var/
      www/
          index.php
          subdir/
                 library.php

index.php是我的调度程序/助推器文件,所有请求都路由到:

define(ROOT_PATH, dirname(__FILE__) ); // /var/www

库.php是一些位于额外目录的文件,我需要确定相对于应用程序根目录(/var/www/)的路径。

$path_current = dirname( __FILE__ ); // /var/www/subdir
$path_relative = str_replace(ROOT_PATH, '', $path_current); // /subdir

可能有更好的方法来计算相对路径,但你明白了。str_replace()


答案 2

从 PHP 5.3.0 开始,您可以使用它来实现此目的。__DIR__

文件的目录。如果在包含中使用,则返回所包含文件的目录。这相当于 dirname(__ FILE__)。

参见 PHP 魔术常量

C:\www>php --version
PHP 5.5.6 (cli) (built: Nov 12 2013 11:33:44)
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2013 Zend Technologies

C:\www>php -r "echo __DIR__;"
C:\www

推荐