将getcwd()和exec('pwd')始终匹配?

时间:2013-04-19 16:57:02

标签: php bash

问题

getcwd()exec('pwd')总是会返回相同的结果吗?如果不是在什么情况下他们不会?

我尝试过什么

我尝试exec('cd ..')然后echo exec('pwd'),但是如果我没有执行cd ..,它会返回相同的路径。这并不让我感到惊讶,因为cd ..可能只存在exec()的持续时间。

2 个答案:

答案 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');