从(命令行)php调用编辑器

时间:2014-05-02 09:03:50

标签: php terminal exec stdin

我正在尝试实现一个简单的程序,其中一些数据需要在外部编辑器中进行编辑。现在,结构是这样的:

$tmpfile = tempnam('foo', 'bar');
file_put_contents($tmpfile, $my_data);

$editor = getenv('EDITOR');
if (!$editor) {
    $editor = 'vim';
}
system("$editor $tmpfile");

// read the modified file's content back into my data...

现在问题是stdin / stdout没有正确映射,导致vim抱怨stdout不是终端。

如何以终端正确连接的方式调用vim(或任何其他编辑器)?

1 个答案:

答案 0 :(得分:0)

可能的解决方案是使用proc_openDocumentation)代替:

$pipes = array();

$editRes = proc_open(
    "$editor $tmpfile",
    array(
        0 => STDIN,
        1 => STDOUT,
        2 => STDERR
    ),
    $pipes
);

proc_close($editRes);

为简洁起见,省略了错误处理。