2013-01-22 39 views
0

所以 - 我使用proc_open()來執行諸如sshrsyncscp等的程序來執行備份任務。PHP proc_open - 如果進程需要輸入,則退出

但是,在某些情況下,這些進程可能變爲交互式並需要輸入,例如,公鑰認證失敗的SSH,並要求輸入密碼。這是一個主要問題,因爲無法讓備份作業掛起,更糟糕的是,不會產生錯誤。

如何在我正在運行的流程中完全消除交互性?如果這個過程突然需要輸入,我想立即解救併產生一個錯誤。 通用超時不是解決方案,因爲備份過程在正常操作中可能需要很長時間。 我真的需要一個通用的解決方案來解決這個問題。

謝謝!

+0

也許會創建一個[自定義流類](http://php.net/manual/en/function.stream-wrapper-register.php),它將自身作爲零長度流傳遞並另外讓您知道何時請求閱讀?不幸的是,PHP的流情況充斥着特殊情況和不一致性,因此聽起來可能會變得更加困難(甚至不可能)。 – Jon

回答

1

只是傳遞一個空文件作爲標準輸入:

$r = proc_open('cat', [fopen('/dev/null', 'rb')], $p); 
proc_close($r) 

這個腳本在幾毫秒結束。