PHP 包含 /require 路径规范格式


php include /require path specification formats

这很简单,但大多数时候都非常混乱。

我需要知道当我们通过以下模式包含文件时意味着什么(我在很多地方看到的地方可能不止于此)

什么意思?

"./path" 
"/path"
"../path"
dirname(__FILE__)
basename(dirname(dirname(__FILE__)));
require dirname(__FILE__) . DIRECTORY_SEPARATOR;
pathinfo()
define('BASE_PATH',realpath('.'));
define('BASE_URL', dirname($_SERVER["SCRIPT_NAME"]));

"./路径"

点表示工作目录。这是在命令行上键入"pwd"时打印的目录。这可能是脚本本身的目录,也可能是首先运行的脚本的目录,但并非总是如此。

"/路径"

以斜杠开头的路径相对于最顶层的目录。这通常是服务器的根目录,但它也可以是挂载点、用户目录或 Web 根目录,具体取决于服务器的配置方式。

"../路径"

".."是指比工作目录高一级的目录。因此,如果工作目录是/foo/bar,则 ".." 是 "/foo" 和 "../path"是指"/foo/path"

目录(__FILE__)

dirname() "返回父目录的路径"__FILE__是一个魔术常量,指的是使用它的文件的完整路径。因此,如果你在/foo/bar/baz/file.php 有一个脚本,__FILE__ 将是 "/foo/bar/baz/file.php" 和 dirname(__FILE__) 将是 "/foo/bar/baz"

basename(dirname(dirname(__FILE__)));

basename() "返回路径的尾随名称组件"。相同的规则适用于 dirname(),因此,虽然上一个示例中的 dirname(__FILE__) 是 "/foo/bar/baz" dirname(dirname(__FILE__)) 将是 "/foo/bar"。此路径的尾随组件是"bar",因此对于此__FILE__,basename(dirname(dirname(__FILE__)))将是"bar"。

需要目录(__FILE__)。DIRECTORY_SEPARATOR;

DIRECTORY_SEPARATOR是一个我不知道的常量,但显然它是在文件系统扩展中定义的。如果__FILE__是"/foo/bar/baz/file.php",则路径为"/foo/bar/baz/"。所以这种说法似乎不完整。require() 与 include() 类似,只是如果找不到文件,它会给出错误。路径从不引用文件,因此此语句没有多大意义。

路径信息()

pathinfo() 解析路径。给它传递一个路径,它将给出一个包含目录、基名、扩展名和文件名键以及解析路径的相应片段的关联数组。

define('BASE_PATH',realpath('.'));

realpath() 将采用相对路径并将其变形为绝对路径。如前所述,"."是指工作目录,如果是"/foo/bar/baz",则realpath(".")将返回"/foo/bar/baz"。define() 将创建一个常量,因此这具有将BASE_PATH常量设置为脚本的工作目录的效果。如果工作目录在脚本过程中发生更改,或者如果您在子目录中包含文件,则它们可以使用常量来引用 Web 应用程序的顶层,这可能很有用。

define('BASE_URL', dirname($_SERVER["SCRIPT_NAME"]));

与 define() 和 dirname() 相同。这里的新东西是 $_SERVER["SCRIPT_NAME"]。如果加载脚本的地址是 example.com/foo/file.php 那么这将是"/foo/file.php",其中的dirname()是"/foo"。设置此常量对于 Web 应用程序中的页面相互引用可能很有用。