2012-02-27 3 views
5

でJavaプログラムを実行できません$ outputは空の配列で$ returnはint(1)ですが、実行した場合:は、私はPHPのexecの機能を使用してPDFファイルに署名するためにJavaプログラムを実行しようとしているが、動作しませんPHPのexecの機能

java -jar PROGRAM.jar -n -t ORIGIN.pdf -o DESTINY.pdf -s CERTIFICATE -p PASSWORD 

コマンドラインでは、それは動作します。誰でも助けてくれますか?

ありがとうございます。

+3

を追加します場合には機能しませんjavaバイナリへのフルパスを供給しますか?たとえば、 '/ usr/bin/java'のようになります。バイナリへのパスを見つけるには 'which java'を使います。 – Treffynnon

+1

@Treffynoonのコメントに加えて、PROGRAM.jar、ORIGIN.pdf、およびDESTINY.pdfファイルの絶対パスを指定する必要があります。 –

+0

ファイルとコマンドのフルパスを使用していて、機能しません。 – josebailo

答えて

1

最後に問題を解決できました。

ソリューションです:

exec('java -Djava.awt.headless=true -jar PROGRAM.jar -n -t ORIGIN.pdf -o DESTINY.pdf -s CERTIFICATE -p PASSWORD', $output, $return); 

等あなたはそれがキーボードを制御していないので、それは間接呼び出しのJavaを言っている-Djava.awt.headless=trueオプション、マウス、

+0

これは私のために働いていない、私は上記のコードを試した、私はまだ結果の空の配列を取得しています –

3

@ Treffynnonが正しいです。コマンドプロンプトからの実行と他のプログラムからの実行の違いは、環境変数とアクセス許可です。

PHPを実行しているサーバーを実行しているユーザーがアプリケーションを実行し、適切なファイルにアクセスする権限を持っているかどうかを最初に確認します。

が続い

  1. Javaへのパスを確認
  2. PROGRAM.jar
  3. ORIGIN.pdf
  4. あなたはおそらく、すなわち、より良いパスを変更指定してください

DESTINY.pdf相対表記または絶対表記のいずれかを使用します。現在の作業ディレクトリは2つのケースで異なる可能性があるためです。

幸運。

2

ほぼ確実にPHPは "java"のパスを知りません。あなたがLinuxの場合、 "which java"を実行して、execコールに戻ってくるjavaのパス全体を入れます。

exec('/usr/bin/java -jar PROGRAM.jar -n -t ORIGIN.pdf -o DESTINY.pdf -s CERTIFICATE -p PASSWORD', $output, $return); 
関連する問題