2

我们有一个像这样执行 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
  • 将包含行发送到交互式 shell
  • 将控制权交给用户输入

有没有办法做到这一点?

4

2 回答 2

0

未经测试的想法:

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

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

于 2017-08-10T20:31:27.263 回答