OSコマンドを実行する関数
shell_exec
shell_exec ( string $cmd ) : string
返り値
実行されたコマンドからの出力を返します。 エラーが発生した場合やコマンドが何も出力しなかった場合は NULL を返します。
例
<?php
$output = shell_exec('ls -lart');
echo "<pre>$output</pre>";
?>
exec
exec ( string $command [, array &$output [, int &$return_var ]] ) : string
返り値
コマンド結果の最後の行を返します。コマンドを実行し、 一切干渉を受けずに直接コマンドから全てのデータを受けとる必要が あるならば、PassThru() 関数を使ってください。
実行されたコマンドの出力を取得するには、必ず output パラメータを設定・使用してください。
例
<?php
// ("whoami" コマンドをパスに有するシステム上で)
// 実行中のphp/httpdプロセスを所有するユーザーの名前を出力
echo exec('whoami');
?>
passthru
passthru ( string $command [, int $return_var ] ) : void
引数 return_var を指定した場合、 Unix コマンドのステータスで置換されます。返り値は有りません。
\「`」演算子
shell_exec()と同じ。
それぞれの違い
shell_execとexecの違い
返り値について
コマンド名 | 返り値 |
---|---|
shell_exec | すべて文字列 |
exec | 文字列、配列 |
実行結果について
コマンド名 | 実行結果 |
---|---|
shell_exec | すべての実行結果を返す |
exec | 最後の行しか返さない(output引数を入れればすべて取得できる。) |
passthruについて
返り値がないので、実行結果を確かめることができないので汎用性に書けていると思われます。
sudoコマンドの実行方法
本題です。
任意のユーザにsudo権限を付与
$ sudo visudo
上記コマンドを入力すると/etc/sudoersの設定ファイルが開くので、最後の行に以下の文を追記
任意のユーザ名 ALL=(ALL) NOPASSWD:実行したいコマンド
「実行したいコマンド」の部分では「ALL」も指定できますが危険なので避けます。