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

2022-08-30 16:30:48

在 PHP 中,两者之间有什么区别

getcwd()
dirname(__FILE__)

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

echo getcwd()."\n";
echo dirname(__FILE__)."\n";

返回:

/home/user/Desktop/testing/
/home/user/Desktop/testing/

哪个是最好的使用?这重要吗?更高级的PHP开发人员更喜欢什么?


答案 1

__FILE__是一个魔术常量,包含您正在执行的文件的完整路径。如果位于包含中,则其路径将是 的内容。__FILE__

因此,使用此设置:

/folder/random/foo.php

<?php
echo getcwd() . "\n";
echo dirname(__FILE__) . "\n" ;
echo "-------\n";
include 'bar/bar.php';

/文件夹/随机/条形/条形图.php

<?php
echo getcwd() . "\n";
echo dirname(__FILE__) . "\n";

您将获得以下输出:

/folder/random
/folder/random
-------
/folder/random
/folder/random/bar

So 返回您开始执行的目录,同时与文件相关。getcwd()dirname(__FILE__)

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

与其他 SAPI 相反,CLI 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

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

更新:从 PHP 5.3.0 开始,您还可以使用等效于 的魔术常量。__DIR__dirname(__FILE__)


答案 2

试试这个。

将文件移动到另一个目录,例如 。testing2

这应该是结果。

/home/user/Desktop/testing/
/home/user/Desktop/testing/testing2/

我认为用于文件操作,其中使用魔术常量并使用实际的文件路径。getcwddirname(__FILE__)__FILE__


编辑:我错了。

好吧,您可以使用.chdir

所以如果你这样做...

chdir('something');
echo getcwd()."\n";
echo dirname(__FILE__)."\n";

这些应该不同。


推荐