问题
getcwd()
和exec('pwd')
总是会返回相同的结果吗?如果不是在什么情况下他们不会?
我尝试过什么
我尝试exec('cd ..')
然后echo exec('pwd')
,但是如果我没有执行cd ..
,它会返回相同的路径。这并不让我感到惊讶,因为cd ..
可能只存在exec()
的持续时间。
答案 0 :(得分:2)
作为“工作目录”的符号链接至少是getcwd()
和exec('pwd')
可能不同的一种情况 - 即使bash内置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。
但是对于大多数用例,包括你的用例,这两种形式都可以使用,所以区别并不重要。
答案 1 :(得分:1)
如果要将相对路径转换为绝对路径,可以使用realpath()
:
$abs_path = realpath('../path/to/binary');