Php getcwd()和exec(';pwd';)是否始终匹配?
问题Php getcwd()和exec(';pwd';)是否始终匹配?,php,bash,Php,Bash,问题 getcwd()和exec('pwd')是否总是返回相同的结果?如果不是,在什么情况下他们不会 我尝试的 我尝试执行exec('cd..'),然后执行echo exec('pwd'),但返回的路径与不执行cd..时的路径相同。这并不让我感到惊讶,因为cd..可能只在执行它的exec()期间有效。如果要将相对路径转换为绝对路径,可以使用realpath(): 作为“工作目录”的符号链接至少是一种情况,其中getcwd()和exec('pwd')可以不同-甚至bash内置pwd和/bin/pw
getcwd()
和exec('pwd')
是否总是返回相同的结果?如果不是,在什么情况下他们不会
我尝试的
我尝试执行
exec('cd..')
,然后执行echo exec('pwd')
,但返回的路径与不执行cd..
时的路径相同。这并不让我感到惊讶,因为cd..
可能只在执行它的exec()
期间有效。如果要将相对路径转换为绝对路径,可以使用realpath()
:
作为“工作目录”的符号链接至少是一种情况,其中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
显然,bash内置的pwd
默认为-L,而/bin/pwd
默认为-p
但是对于大多数用例,包括您的用例,这两种表单都可以工作,所以这里的差异并不重要。它们应该返回相同的内容(后者做更多的工作);您想要完成什么?请记住,
exec('cd..)
将在PHP生成的shell中运行cd
命令。一旦shell退出,它的本地环境就会丢失。如果您想更改PHP中的工作目录,请改用。@Jack-我想通过命令行运行命令,但该命令需要绝对路径,因此我想解析相对路径,我的程序可以接受绝对路径。我问这个问题的原因是因为我使用的是CLI中的绝对路径,而不是PHP中的绝对路径。如果在PHP和stat中执行stat('.')。在Linux的CLI中产生不同的结果。。。我很想知道。这就是问题所在。@neubert,恐怕我当时不明白这个问题。你能分享一些代码来详细说明吗?
# 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
-L, --logical
use PWD from environment, even if it contains symlinks
-P, --physical
avoid all symlinks