我正在尝试实现一个简单的程序,其中一些数据需要在外部编辑器中进行编辑。现在,结构是这样的:
$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(或任何其他编辑器)?
答案 0 :(得分:0)
可能的解决方案是使用proc_open
(Documentation)代替:
$pipes = array();
$editRes = proc_open(
"$editor $tmpfile",
array(
0 => STDIN,
1 => STDOUT,
2 => STDERR
),
$pipes
);
proc_close($editRes);
为简洁起见,省略了错误处理。