我有一個個人的Ubuntu服務器的機器這個PHP代碼 '蘇必須從終端運行':PHP的proc_open:
$cmd = 'su testuser'; $descriptorspec = array( array('pipe', 'r'), array('pipe', 'w'), array('pipe', 'w') ); $pipes = array(); $process = proc_open($cmd, $descriptorspec, $pipes); fwrite($pipes[0], 'password\r'); fclose($pipes[0]); $string = array(stream_get_contents($pipes[1]), stream_get_contents($pipes[2])); proc_close($process); echo exec('whoami') . "\n"; print_r($string);
我從PHP得到這樣的響應:
www-data Array ( [0] => [1] => su: must be run from a terminal )
這是顯然我想改變活躍的用戶,但有沒有辦法從PHP做到這一點?
,要麼使用'sudo'或設置'粘bit':
試試這個代碼(用你的密碼更換密碼)。但是在腳本上要小心,因爲它們可能會被打斷,並且仍然有底層的解釋器/ shell +環境+環境變量。 – DanFromGermany
您不能更改當前進程的活動用戶,只能在_new_進程中切換到其他用戶。如果你用bash命令,你可以看到它實際上用'ps f'做了什麼:它是一個全新的shell。同樣,你不能改變php運行的過程,但是你可以啓動一個子進程(儘管我通常會在web服務器中避免這種情況)。根據您對其他用戶的需求,像suphp這樣的軟件包或者使用SuExec可能是解決您的問題的解決方案。另一個選擇是使用正確的用戶運行deamon like gearmand,它遵從www數據的請求。 – Wrikken