getcwd()和dirname(__ FILE__)之间的区别?我应该使用哪个?

Urd*_*rda 25 php directory

在PHP中有什么区别

getcwd()
dirname(__FILE__)
Run Code Online (Sandbox Code Playgroud)

当我从CLI回显时,它们都返回相同的结果

echo getcwd()."\n";
echo dirname(__FILE__)."\n";
Run Code Online (Sandbox Code Playgroud)

返回:

/home/user/Desktop/testing/
/home/user/Desktop/testing/
Run Code Online (Sandbox Code Playgroud)

哪个是最好用的?有关系吗?更高级的PHP开发人员更喜欢什么?

Tho*_*ers 51

__FILE__是一个魔术常量,包含正在执行的文件的完整路径.如果你在include中,它的路径将是__FILE__.

所以使用此设置:

/folder/random/foo.php

<?php
echo getcwd() . "\n";
echo dirname(__FILE__) . "\n" ;
echo "-------\n";
include 'bar/bar.php';
Run Code Online (Sandbox Code Playgroud)

/folder/random/bar/bar.php

<?php
echo getcwd() . "\n";
echo dirname(__FILE__) . "\n";
Run Code Online (Sandbox Code Playgroud)

你得到这个输出:

/folder/random
/folder/random
-------
/folder/random
/folder/random/bar
Run Code Online (Sandbox Code Playgroud)

因此,getcwd()返回您开始执行的目录,同时dirname(__FILE__)依赖于文件.

在我的Web服务器上,getcwd()返回最初开始执行的文件的位置.使用CLI,它等于执行时的结果pwd.CLI SAPI文档getcwd手册页上的注释支持这一点:

CLI SAPI - 与其他SAPI相反 - 不会自动将当前工作目录更改为启动脚本所在的目录.

所以喜欢:

thom@griffin /home/thom $ echo "<?php echo getcwd() . '\n' ?>" >> test.php
thom@griffin /home/thom $ php test.php 
/home/thom
thom@griffin /home/thom $ cd ..
thom@griffin /home $ php thom/test.php 
/home
Run Code Online (Sandbox Code Playgroud)

当然,另请参阅http://php.net/manual/en/function.getcwd.php上的手册

更新:从PHP 5.3.0开始,你也可以使用__DIR__相当于的魔术常量dirname(__FILE__).

  • 完美的例子是完美的!谢谢! (2认同)