在PHP中有什么区别
getcwd()
dirname(__FILE__)
当我从CLI回显
时,它们都返回相同的结果echo getcwd()."\n";
echo dirname(__FILE__)."\n";
返回:
/home/user/Desktop/testing/
/home/user/Desktop/testing/
哪个是最好用的?有关系吗?更高级的PHP开发人员更喜欢什么?
答案 0 :(得分:50)
__FILE__
是magic constant,包含您正在执行的文件的完整路径。如果您在include中,则其路径将是__FILE__
的内容。
所以使用此设置:
<强> /folder/random/foo.php 强>
<?php
echo getcwd() . "\n";
echo dirname(__FILE__) . "\n" ;
echo "-------\n";
include 'bar/bar.php';
<强> /folder/random/bar/bar.php 强>
<?php
echo getcwd() . "\n";
echo dirname(__FILE__) . "\n";
你得到这个输出:
/folder/random
/folder/random
-------
/folder/random
/folder/random/bar
因此getcwd()
会返回您开始执行的目录,而dirname(__FILE__)
则依赖于文件。
在我的网络服务器上,getcwd()
返回最初开始执行的文件的位置。使用CLI,它等于执行pwd
时的结果。 documentation of the 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
当然,请参阅http://php.net/manual/en/function.getcwd.php
上的手册 更新:自PHP 5.3.0起,您还可以使用相当于__DIR__
的魔术常量dirname(__FILE__)
。
答案 1 :(得分:1)
试试这个。
将您的文件移至另一个目录testing2
。
这应该是结果。
/home/user/Desktop/testing/
/home/user/Desktop/testing/testing2/
我认为 getcwd
用于文件操作,其中dirname(__FILE__)
使用魔术常量__FILE__
并使用实际文件路径。
编辑:我错了。
您可以使用chdir
更改工作目录。
所以,如果你这样做......
chdir('something');
echo getcwd()."\n";
echo dirname(__FILE__)."\n";
那些应该是不同的。
答案 2 :(得分:1)
如果从命令行调用该文件,则差异很明显。
cd foo
php bin/test.php
在test.php中,getcwd()
将返回foo
(您当前的工作目录),dirname(__FILE__)
将返回bin
(执行文件的目录名称)。