web-dev-qa-db-ja.com

PHPからBashコマンドを実行

コマンドラインから次のように実行するbashスクリプトがあります。

./script.sh var1 var2

特定のphpファイルを呼び出した後、上記のコマンドを実行しようとしています。

私が今持っているものは:

$output = Shell_exec("./script.sh var1 var2");
echo "<pre>$output</pre>";

しかし、それは機能しません。 execsystemも使用して試してみましたが、スクリプトは実行されませんでした。

ただし、Shell_exec("ls");を実行しようとすると動作し、$outputはすべてのファイルのリストです。

これが使用しているVPSの制限によるものなのか、問題が他のどこかにあるのかどうかはわかりませんか?

47
r0skar

おそらく、スクリプトを呼び出す前に、正しいディレクトリに chdir する必要があります。この方法により、シェルコマンドを呼び出す前に、スクリプトがどのディレクトリにあるかを確認できます。

$old_path = getcwd();
chdir('/my/path/');
$output = Shell_exec('./script.sh var1 var2');
chdir($old_path);
71
Robert K

Shell_execは、ディレクトリからwww-dataユーザーによって実行されます。あなたが試すことができます

putenv("PATH=/home/user/bin/:" .$_ENV["PATH"]."");

スクリプトが/ home/user/binにある場所は後でできます

$output = "<pre>".Shell_exec("scriptname v1 v2")."</pre>";
echo $output;

コマンドの出力を表示します。 (または、パスをエクスポートせずに、。/ script.shだけでなく、スクリプトの完全なパスを指定してみてください

5
Hrishikesh

使用しているドメインのphp.iniまたは.htaccessでopen_basedirを設定していないか確認してください。それはあなたのドメインのディレクトリに投獄され、phpはこのディレクトリ内で実行するためのアクセスのみを取得します。

0
CommanderSpock