65

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

./script.sh var1 var2

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

私が今持っているのは:

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

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

ただし、実行しようとするshell_exec("ls");と機能し$output、すべてのファイルのリストになります。

これが使用しているVPSの制限によるものなのか、それとも問題が別の場所にあるのかわかりません。

4

3 に答える 3

93

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

$old_path = getcwd();
chdir('/my/path/');
$output = shell_exec('./script.sh var1 var2');
chdir($old_path);
于 2012-06-15T14:18:03.047 に答える
5

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 だけでなく、スクリプトのパス全体を指定してみてください

于 2012-06-15T14:18:00.937 に答える