如何在shell中从PHP启动命令?

时间:2013-03-22 16:24:44

标签: php unix

当您尝试在没有任何消息的情况下在git中进行提交时,它将在shell中为您打开编辑器,当您关闭编辑器时,git将读取内容。

我想完全一样,但是在php。

正如我在git sources(https://github.com/git/git/blob/master/editor.c)中看到的那样,它只是在use_shell标志设置为true的情况下启动进程。我怎样才能在PHP中实现这一点?另外,我看到git将SIGINT和SIGQUIT信号设置为忽略。如何在PHP中完成?

1 个答案:

答案 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以使流程具有交互性(否则它将挂起,具体取决于编辑器)。