我可以从PHP脚本更改当前的shell目录吗?如果是这样,怎么样?

时间:2014-01-07 00:40:57

标签: php shell command-line-interface

我正在为MediaWiki开发一些PHP cli工具,我希望能够从shell中cd到wiki的目录中。我可以用PHP做到这一点吗?如果没有,是否有可能将整个事物包装成能够做到这一点的其他事情?

例如:

~$ mewsh @coin cd

应该带我到coinwiki所在的适当目录。 chdir是不够的,因为这不会在PHP脚本完成后更改目录。

1 个答案:

答案 0 :(得分:1)

这不是你是否可以从php做到这一点 - 你不能从任何衍生的过程中做到这一点。衍生过程是一个新过程(通常使用forkexec创建)。对新进程的工作目录的更改不会影响父进程的工作目录。

那就是说,如果你想变得疯狂,你可以:这是一个用于父目录的PHP脚本,然后用bash替换自己。它无法更改父进程的目录,但可以使用新目录启动 new shell。

<?php
chdir('..'); // Chdir to the parent directory in this php process.
pnctl_exec('/bin/bash'); /* Execute '/bin/bash' in the current process space.
  This is oversimplified in many ways
  – including that I didn't pass any arguments to the shell. */

如果你有进一步的hackery,如果你完全控制了这个脚本的调用方式,你可以exec它并用新的shell替换当前的shell。

~ $ exec php chdir.php
/Users $

但是,如果您打算与某人分享此脚本,那么您不应该有这些期望 - 在您自己的程序中管理的工作目录会更加精明。