【问题标题】:Inject input into process connected to standard input (interactive console)将输入注入连接到标准输入的进程(交互式控制台)
【发布时间】:2013-03-18 16:42:16
【问题描述】:

我们有一个像这样执行 PHP 交互式 shell 的工具:

$descriptorSpec = array(
    0 => STDIN,
    1 => STDOUT,
    2 => STDERR
);

$prependFile = __DIR__ . '/../../../../../res/dev/console_auto_prepend.php';
$exec = 'php -a -d auto_prepend_file=' . escapeshellarg($prependFile);

$pipes = array();
proc_open($exec, $descriptorSpec, $pipes);

不幸的是,auto_prepend_file 的技巧会导致 PHP 5.3 上的自动加载问题。我们发现当我们将文件包含在交互式 shell 中时,一切都很好:

$ php -a 交互式外壳 php > 包括“myproject/res/dev/console_auto_prepend.php”; 自动加载器已初始化。

我们要做的是:

  • 通过 proc_open 执行 php 交互式 shell
  • 将包含行发送到交互式外壳
  • 将控制权交给用户输入

有什么办法吗?

【问题讨论】:

    标签: php command-line-interface stdin


    【解决方案1】:

    项目最终使用了自定义 PHP shell (psysh)

    【讨论】:

      【解决方案2】:

      未经测试的想法:

      • 创建了一个新的输入管道
      • 使用该输入管道打开 PHP 进程 (php -a),stdout 和 stderr 可以连接到系统管道
      • 注入 include 命令(写入输入管道)
      • 在从 STDIN 读取并写入我们的新输入管道(连接到 php -a)的循环中

      【讨论】:

        猜你喜欢
        • 2019-09-03
        • 1970-01-01
        • 2013-11-12
        • 1970-01-01
        • 2015-02-02
        • 2011-09-13
        • 2014-02-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多