2012-06-15 20 views
41

から私はコマンドラインから次のように実行することを、bashスクリプトを持っています。実行Bashのコマンドは、PHP

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

しかし、それは動作しません:私は今持っている何

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

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

私が使用しているVPSの制限のためか、問題が別の場所にあるかどうかはわかりません。

+1

どのパスを実行していますか? 'pwd'は何を返しますか? – alex

+1

あなたのスクリプトは 'apache'または' www-data'ユーザで実行可能ですか? – core1024

+2

そのbashスクリプトはPHPスクリプトと同じディレクトリにありますか? PHPスクリプトの作業ディレクトリは同じディレクトリですか? –

答えて

58

スクリプトを呼び出す前に正しいディレクトリにchdirが必要なことがあります。 「の」シェルコマンドを呼び出す前に。

$old_path = getcwd(); 
chdir('/my/path/'); 
$output = shell_exec('./script.sh var1 var2'); 
chdir($old_path); 
+0

これはトリックをしたと思います!少なくとも私はそれを単純なテストスクリプトで動作させました。最終的にそれを検証するために、私はサーバーのホスティングがスクリプトの正確なパスを教えてくれるのを待たなければなりません。それにもかかわらず、私は今答えに印を付けるつもりです。ありがとう! – Andrej

+0

@Andrej:または、相対パスの代わりにスクリプトへの絶対パスを使用します。 –

+0

@Andrej PHP 5.3を実行している場合は、 'chdir(__ DIR __)'を使ってディレクトリをスクリプトを含むディレクトリに変更することができます。 PHP 5.2以降では、 'dirname(__ FILE __)'がこのトリックを行います。 –

5

shell_execはwww-dataユーザーによってそのディレクトリから実行されます。 あなたのスクリプトが 後で上/ホーム/ユーザー/ binにある

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

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

コマンドの出力を表示することができます試すことができます。 (パスをエクスポートせずに、スクリプトのパス全体を指定してみてください。

+0

'PATH'環境変数を変更する必要はありません。代わりに、現在の作業ディレクトリを変更する必要があります([my answer](http://stackoverflow.com/a/11052453/24950)参照)。 –

+1

真。ありがとう。複数の場所にさまざまなカスタム実行ファイルがあり、入力ボックスをコンソールとして機能させたいので、私は自分のコードでパス設定を使用していたので、それらからコマンドを呼び出すことができます。とにかく、shell_exec( '/ entire/path/to/file /')を使うことができます。 – Hrishikesh

0

チェックだけでしょう、あなたのドメインとPHPのディレクトリに。その意志の刑務所あなたをあなたが使用しているもののphp.iniまたはドメインの.htaccessファイルでopen_basedirのを設定していない場合

関連する問題