我正在为MediaWiki开发一些PHP cli工具,我希望能够从shell中cd到wiki的目录中。我可以用PHP做到这一点吗?如果没有,是否有可能将整个事物包装成能够做到这一点的其他事情?
例如:
~$ mewsh @coin cd
应该带我到coinwiki所在的适当目录。 chdir
是不够的,因为这不会在PHP脚本完成后更改目录。
答案 0 :(得分:1)
这不是你是否可以从php做到这一点 - 你不能从任何衍生的过程中做到这一点。衍生过程是一个新过程(通常使用fork和exec创建)。对新进程的工作目录的更改不会影响父进程的工作目录。
那就是说,如果你想变得疯狂,你可以:这是一个用于父目录的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 $
但是,如果您打算与某人分享此脚本,那么您不应该有这些期望 - 在您自己的程序中管理仅的工作目录会更加精明。