当您尝试在没有任何消息的情况下在git中进行提交时,它将在shell中为您打开编辑器,当您关闭编辑器时,git将读取内容。
我想完全一样,但是在php。
正如我在git sources(https://github.com/git/git/blob/master/editor.c)中看到的那样,它只是在use_shell
标志设置为true的情况下启动进程。我怎样才能在PHP中实现这一点?另外,我看到git将SIGINT和SIGQUIT信号设置为忽略。如何在PHP中完成?
答案 0 :(得分:1)
shell_exec()
将在shell中生成一个进程:http://php.net/shell_exec
要处理您需要使用pcntl_signal()
的信号,这需要pcntl扩展名:http://php.net/manual/en/function.pcntl-signal.php
完整示例,打开要编辑的文件,然后显示已编辑的内容:
$fh = fopen('tmp_file', 'w');
fwrite($fh, "Hello!");
fclose($fh);
shell_exec("nano tmp_file > /dev/tty < /dev/tty");
$data = file_get_contents('tmp_file');
unlink('tmp_file');
echo "You entered: $data\n";
您需要将输入和输出重定向到/dev/tty
以使流程具有交互性(否则它将挂起,具体取决于编辑器)。