【问题标题】:Can I change the current shell directory from a PHP script? If so, how?我可以从 PHP 脚本更改当前的 shell 目录吗?如果是这样,怎么做?
【发布时间】:2014-01-07 00:40:56
【问题描述】:
我正在为 MediaWiki 开发一些 PHP cli 工具,我希望能够从 shell cd 进入 wiki 的目录。我可以从 PHP 做到这一点吗?如果没有,是否有可能将整个东西包装成其他能够做到这一点的东西?
例如:
~$ mewsh @coin cd
应该带我到coinwiki所在的适当目录。 chdir 是不够的,因为这不会在 PHP 脚本完成后更改目录。
【问题讨论】:
标签:
php
shell
command-line-interface
【解决方案1】:
这不是您是否可以从 php 中执行此操作的问题——您无法从任何衍生进程中执行此操作。衍生进程是一个新进程(通常使用fork 和exec 创建)。对新进程工作目录的更改不会影响父进程的工作目录。
也就是说,如果你想变得疯狂,你可以:这是一个 chdirs 到父目录然后用 bash 替换自身的 php 脚本。它不能改变父进程的目录,但它可以用一个新目录启动一个 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. */
对于进一步的骇客,如果您完全控制如何调用此脚本,您可以exec 它并用新的 shell 替换当前的 shell。
~ $ exec php chdir.php
/Users $
但是,如果您打算与他人共享此脚本,则不应抱有这些期望 - 在您自己的程序中仅管理工作目录要明智得多。