[PHP-users 8194] Re: シェルコマンドの使用について

Youichi Iwakiri php-users@php.gr.jp
Sat, 22 Jun 2002 11:08:39 +0900


いわきりです

Tomoya Uemura wrote in <001c01c21915$20174a00$7701a8c0@uemura> :
>phpでwebアプリケーションを作成し、アプリケーション上から
>useraddやgropuaddなどのシェルコマンド(?)を使用したいと
>思っています。

Apacheをuseradd, groupaddの実行権を持ったユーザで起動する必要が
あります。
#ほぼrootって事になりますけど
即時アカウントの発行の必要性がなければ、root以外の権限の弱いユーザで
Apacheを起動して、適当なファイルに登録情報を保存しておいて
後から一括登録するとかの方が堅牢だと思うんですが。
また、UNIX Accountを発行せずとも良いのであればユーザ管理は別のもの
で管理した方が良くないですか?

>また、シェルコマンドではないのですが、namazuのコマンドも
>使用したいと考えています。
>環境は、Redhat7.2J+apache1.3.14+php4.0.3です。
>実際に自分でも分からないなりに、shell_exec ( )などを使って
>見たのですが、根本的に構文の書き方などが分からず
>上手く動作していません。

shell_exec()は``と等価とマニュアルにあるので
下記の様に書けば動くと思います。
#昔書いたコードをのせときます

function sophos_anti_virus($path) {
	$dirty_files = array();
	$scan_msg = `/usr/local/bin/sweep -archive -all {$path}`;
	// $scan_msg = shell_exec("/usr/local/bin/sweep -archive -all {$path}");
	// 前行と置き換えると動くはず
	$scan_msg = split("\n", $scan_msg);
	foreach ($scan_msg as $temp) {
		if (preg_match("/^>>> Virus \'(.+?)\' found in file (.*)$/", $temp, $matches)) {
			$dirty_files[] = array ( 'VirusType' => $matches[1], 'filename' => $matches[2]);
		}
	}
	return $dirty_files;
}

>また、phpからシェルコマンドを使用する場合の環境変数は
>どのユーザの環境を使用しているのでしょうか?

PHPの起動方法に因るんで何とも言えないです。
DSOで利用しているのならば、Apacheの起動ユーザの環境
suexecなら、CGI版のPHPになりますが、特定ユーザの環境
となると思いました。

あとNamazuのコマンドとありますが、検索のみなら
php_namazu拡張モジュールの利用をお勧めします。
shell_exec()でnamazuコマンドの出力を得て、加工するより
は応用も利きますので。

-- 
Youichi Iwakiri