2

PHPを使用してJava関数を呼び出します。コードは次のとおりです。

exec('pushd d:\xampp\htdocs\file_excecute\class & java Autoingestion username password id   Sales Daily Summary 20120902',$output,$return);

このコードはWindowsマシンでは機能しましたが、Linuxサーバーでは機能しません。コードは次のとおりです。

exec('pushd \var\www\domainname.com\itune_report\class & java Autoingestion username password id Sales Weekly Summary 20120901',$output,$return);
4

3 に答える 3

0

PHPスクリプトおよびSELinux対応マシンでPHPによって呼び出される外部スクリプトからsudoコマンドを実行しようとすると、(おそらく克服できない)問題が発生します。

コマンドでLinuxディレクトリパスを使用していることを確認してください

Linuxは、デフォルトでapacheにプロセスのグループIDを変更させません。

PHPスクリプトで、cronまたはinotifyによって監視され、root権限で別のスクリプトを呼び出すディレクトリにファイルを保存するなど、別のソリューションを使用する必要がある場合があります。

于 2012-09-04T12:30:43.490 に答える
0

明らかに、Linuxでは機能しません。コマンドpushdはWindowsシェルでのみ定義されています。Linuxのパスでは、区切り文字としてバックスラッシュではなくフォワードスラッシュを使用する必要があります。

于 2012-09-04T12:31:01.770 に答える
0

フィールドセパレータとして間違った種類のスラッシュを使用していますが、それが唯一の問題ではない可能性があります。

フォームを使用しているため、コマンドの出力は$outputに表示されますexec(command, output, return)

ただし、これはあなたにstdoutを与えるだけです。シェルはエラーメッセージをstderrに送信します。

残念ながら、exec()stderrを読み取るバージョンはありません。

シェルコマンドの最後に次を$output追加することで、両方の出力をにマージできます。2>&1

exec("mycommand 2>&1", $output, $return);

$ outputを見ると成功したコマンドの出力またはエラーメッセージが表示され、それが機能しなかった理由を解明するために使用できます。

stdoutとstderrを別々に扱う、より厳密なものを記述したい場合は、proc_open()代わりに次を使用する必要があります。Exec()の後のPHP StdErr

于 2012-09-04T12:47:31.430 に答える