【问题标题】: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 中执行此操作的问题——您无法从任何衍生进程中执行此操作。衍生进程是一个新进程(通常使用forkexec 创建)。对新进程工作目录的更改不会影响父进程的工作目录。

也就是说,如果你想变得疯狂,你可以:这是一个 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 $

但是,如果您打算与他人共享此脚本,则不应抱有这些期望 - 在您自己的程序中管理工作目录要明智得多。

【讨论】:

    猜你喜欢
    • 2012-08-10
    • 2020-01-21
    • 2012-04-08
    • 2021-06-30
    • 2017-11-14
    • 2017-09-26
    • 1970-01-01
    • 2010-11-16
    • 2019-12-12
    相关资源
    最近更新 更多