コマンドラインから次のように実行するbashスクリプトがあります。
./script.sh var1 var2
特定のphpファイルを呼び出した後、上記のコマンドを実行しようとしています。
私が今持っているものは:
$output = Shell_exec("./script.sh var1 var2");
echo "<pre>$output</pre>";
しかし、それは機能しません。 exec
とsystem
も使用して試してみましたが、スクリプトは実行されませんでした。
ただし、Shell_exec("ls");
を実行しようとすると動作し、$output
はすべてのファイルのリストです。
これが使用しているVPSの制限によるものなのか、問題が他のどこかにあるのかどうかはわかりませんか?
おそらく、スクリプトを呼び出す前に、正しいディレクトリに chdir する必要があります。この方法により、シェルコマンドを呼び出す前に、スクリプトがどのディレクトリにあるかを確認できます。
$old_path = getcwd();
chdir('/my/path/');
$output = Shell_exec('./script.sh var1 var2');
chdir($old_path);
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だけでなく、スクリプトの完全なパスを指定してみてください
使用しているドメインのphp.iniまたは.htaccessでopen_basedirを設定していないか確認してください。それはあなたのドメインのディレクトリに投獄され、phpはこのディレクトリ内で実行するためのアクセスのみを取得します。