很抱歉我之前发布了错误的代码,但这又是一个问题。
我试图在php的exec中使用pushd,但工作目录没有改变。我有几行的示例代码:
<?php
exec('pwd; pushd abc/def/; pwd; popd; pwd; 2>&1', $output);
echo('<pre>');
print_r($output);
输出是
Array
(
[0] => /var/www/html
[1] => /var/www/html
[2] => /var/www/html
)
为了回答这个问题,我想提前感谢大家vinaka
关于您的问题:
exec()创建了一个新进程,它有自己的工作目录,所以它不会影响启动它的进程的工作副本。只需在浏览器的起始页键入"change working directory php"并进行一些研究,应该不会太难找到。
关于您的代码:
并不是每个shell都内置了pushd
。例如,Debian上的默认/bin/sh没有,但您看不到这一点,因为尽管您进行了尝试,但您只捕获了stdout,而没有捕获stderr。不过,我建议用PHP编写代码,而不是解析shell输出。
如果您想更改当前运行的PHP进程的目录,请使用
chdir ( $directory )
这将根据成功/失败返回true/false。
http://php.net/manual/en/function.chdir.php