4

问题

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

我试过的

我尝试这样做exec('cd ..'),然后echo exec('pwd')返回相同的路径,如果我不这样做cd ..。这并不让我感到惊讶,因为它cd ..可能只exec()在它完成的持续时间内存在。

4

2 回答 2

3

作为“工作目录”的符号链接至少是一种可能不同的情况——即使是内置的 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。

但是对于大多数用例,包括你的,这两种形式都可以工作,所以这里的区别并不重要。

于 2013-09-16T10:43:21.070 回答
1

如果要将相对路径转换为绝对路径,可以使用realpath()

$abs_path = realpath('../path/to/binary');
于 2013-04-19T17:24:09.903 回答