LoginSignup
2
2

More than 3 years have passed since last update.

PHPでsudoコマンドを実行する方法

Last updated at Posted at 2020-06-04

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」も指定できますが危険なので避けます。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2