2012-02-27 7 views
5

Sto cercando di eseguire un programma Java per firmare un file pdf con la funzione php exec ma non funziona:Non è possibile eseguire il programma java con la funzione php exec

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

Quando eseguire esso, il $ uscita è un array vuoto e $ ritorno è un int (1), ma se corro:

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

In linea di comando funziona. Qualcuno può aiutarmi?

Grazie.

+3

funziona se si fornire il percorso completo al file binario java? Ad esempio '/ usr/bin/java'. Usa 'which java' per trovare il percorso del binario. – Treffynnon

+1

Oltre al commento di @Treffynoon, potrebbe anche essere necessario specificare il percorso completo dei file PROGRAM.jar, ORIGIN.pdf e DESTINY.pdf –

+0

Io uso solo il percorso completo per i file e il comando e non funziona. – josebailo

risposta

1

Finalmente ho potuto risolvere il problema.

La soluzione è:

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

Aggiunta l'opzione -Djava.awt.headless=true stai dicendo java che si tratta di una chiamata indiretta in modo che non ha il controllo su tastiera, mouse, ecc

+0

ciao questo non funziona per me, ho provato il codice di cui sopra, sto ancora ottenendo un array vuoto per risultato –

3

@Treffynnon ha ragione. La differenza tra l'esecuzione del programma dal prompt dei comandi e da un altro programma è rappresentata da variabili d'ambiente e autorizzazioni.

Quindi, verificare innanzitutto se l'utente che esegue il server su cui è in esecuzione PHP dispone delle autorizzazioni per eseguire l'applicazione e accedere ai file appropriati.

quindi verificare il percorso per

  1. java
  2. PROGRAM.jar
  3. ORIGIN.pdf
  4. DESTINY.pdf

Probabilmente si dovrebbe modificare il percorso, vale a dire meglio specificare usando la notazione relativa o assoluta. È perché la directory di lavoro corrente potrebbe essere diversa in 2 casi.

Buona fortuna.

2

Quasi certamente PHP non conoscerà il percorso di "java". Se sei in Linux, esegui "which java" e metti l'intero percorso java che torni nella chiamata exec, ad es.

exec('/usr/bin/java -jar PROGRAM.jar -n -t ORIGIN.pdf -o DESTINY.pdf -s CERTIFICATE -p PASSWORD', $output, $return); 
Problemi correlati