问题
是否getcwd()
并且exec('pwd')
总是会返回相同的结果?如果不是在什么情况下他们不会?
我试过的
我尝试这样做exec('cd ..')
,然后echo exec('pwd')
返回相同的路径,如果我不这样做cd ..
。这并不让我感到惊讶,因为它cd ..
可能只exec()
在它完成的持续时间内存在。
作为“工作目录”的符号链接至少是一种可能不同的情况——即使是内置的 bash ,getcwd()
也可能在此处有所不同。exec('pwd')
pwd
/bin/pwd
# ll /res4/Linux/eldk
lrwxrwxrwx 1 armali ARNGO_res4 9 Oct 20 2008 /res4/Linux/eldk -> eldk3.1.1
# cd /res4/Linux/eldk
# php
<?php
echo getcwd(), "\n";
echo exec('pwd'), "\n";
?>
/res4/Linux/eldk3.1.1
/res4/Linux/eldk
# pwd
/res4/Linux/eldk
# /bin/pwd
/res4/Linux/eldk3.1.1
有以下pwd
选项:
-L, --logical
use PWD from environment, even if it contains symlinks
-P, --physical
avoid all symlinks
显然,bash 内置pwd
默认为 -L 和/bin/pwd
-P。
但是对于大多数用例,包括你的,这两种形式都可以工作,所以这里的区别并不重要。
如果要将相对路径转换为绝对路径,可以使用realpath()
:
$abs_path = realpath('../path/to/binary');