getcwd()
getcwd()
是一个函数,它返回当前工作目录(CWD)的完整路径。当前工作目录是脚本开始执行时所在的目录,除非在脚本执行过程中通过 chdir()
函数进行了更改。
php">$cwd = getcwd();
echo $cwd; // 输出当前工作目录的完整路径
__DIR__
__DIR__
是一个魔术常量,它返回当前文件所在的目录的完整路径(不包括文件名)。这个路径在文件被解析时就已经确定,并且之后不会改变,无论当前工作目录如何变化。
php">echo __DIR__; // 输出当前文件所在目录的完整路径
__FILE__
__FILE__
是另一个魔术常量,它返回当前文件的完整路径和文件名。这个路径也是在文件被解析时确定的,之后同样不会改变。
php">echo __FILE__; // 输出当前文件的完整路径和文件名
区别
getcwd()
:- 返回当前工作目录的路径。
- 可以通过
chdir()
函数在脚本执行过程中更改。 - 与脚本的起始目录相关,而不是文件本身。
__DIR__
:- 返回当前文件所在的目录的路径。
- 路径在文件被解析时确定,之后不会改变。
- 与文件本身的位置相关。
__FILE__
:- 返回当前文件的完整路径和文件名。
- 路径在文件被解析时确定,之后不会改变。
- 与文件本身的位置相关。
示例
假设你有以下的文件结构:
php">/project/ /includes/ helper.php main.php
在 main.php
中,如果当前工作目录是 /project/
,你可以得到以下输出:
php">// main.php
echo getcwd(); // 输出: /project/
echo __DIR__; // 输出: /project/
echo __FILE__; // 输出: /project/main.php chdir('includes'); // 更改当前工作目录为 /project/includes/
echo getcwd(); // 输出: /project/includes/
echo __DIR__; // 输出: /project/ (仍然不变)
echo __FILE__; // 输出: /project/main.php (仍然不变)
在 helper.php
中,你会得到不同的输出:
php">// includes/helper.php
echo getcwd(); // 输出可能与 main.php 中的相同,也可能是其他目录(取决于如何包含 helper.php)
echo __DIR__; // 输出: /project/includes/
echo __FILE__; // 输出: /project/includes/helper.php
注意,getcwd()
的输出可能因 chdir()
的调用或包含文件的上下文而异,而 __DIR__
和 __FILE__
则总是返回包含它们的文件的路径。