Php 将输入注入连接到标准输入的流程(交互式控制台)

Php 将输入注入连接到标准输入的流程(交互式控制台),php,command-line-interface,stdin,Php,Command Line Interface,Stdin,我们有一个执行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($p

我们有一个执行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
的技巧不幸地导致了PHP5.3上的自动加载问题。我们发现,当我们将文件包含在交互式shell中时,一切都很好:

$ php -a Interactive shell php > include "myproject/res/dev/console_auto_prepend.php"; Autoloader initialized. $php-a 交互式shell php>包括“myproject/res/dev/console\u auto\u prepend.php”; 自动加载器已初始化。 我们要做的是:

  • 通过proc_open执行php交互式shell
  • 将include行发送到交互式shell
  • 将控制器移交给用户输入
有什么方法可以做到这一点吗?

未经测试的想法:

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

该项目最终使用了一个定制的PHP shell(
psysh