2013-03-22 18 views
-1

當你試圖在沒有任何消息的情況下在git中進行提交時,它會在shell中爲你打開編輯器,當你關閉編輯器時,git將讀取內容。如何在shell中從PHP啓動命令?

我想做的完全一樣,但在PHP中。

正如我在git來源(https://github.com/git/git/blob/master/editor.c)中看到的,它只是開始處理use_shell標誌設置爲true。我怎樣才能在PHP中實現這一點?另外,我看到git將SIGINT和SIGQUIT信號設置爲忽略。如何在PHP中完成?

+2

什麼是對PHP的癡迷?你爲什麼認爲PHP適合這項任務? – 2013-03-22 16:26:09

+0

我正在寫一個PHP命令,這就是爲什麼我要它在PHP中工作,沒有任何癡迷。 – nikita2206 2013-03-22 16:29:54

+0

@ nikita2206通過這個問題,似乎對PHP很感興趣。其他編程語言可用於執行您所請求的內容 – 2013-03-22 16:31:28

回答

1

shell_exec()將在殼產卵的過程: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使流程交互(otherwis它會掛起,取決於編輯器)。

+0

哇,謝謝!這是我應該明確地瞭解* nix shell的一些事情...... – nikita2206 2013-03-24 12:30:06