2012-02-27 17 views
5

próbuję wykonać program java do podpisania plik PDF z funkcji php exec, ale nie działa:Nie można wykonać program java z funkcji php exec

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

Kiedy go wykonać, na $ output to pusta tablica, a $ return to int (1), ale jeśli uruchomię:

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

W linii komend działa. Czy ktoś może mi pomóc?

Dziękuję.

+3

Czy to działa, jeśli podać pełną ścieżkę do pliku binarnego java? Na przykład '/ usr/bin/java'. Użyj 'which java', aby znaleźć ścieżkę do pliku binarnego. – Treffynnon

+1

Oprócz komentarza @Treffynoon, może być również konieczne określenie pełnej ścieżki do pliku PROGRAM.jar, ORIGIN.pdf i DESTINY.pdf –

+0

Używam tylko pełnej ścieżki do plików i polecenia i nie działa. – josebailo

Odpowiedz

1

W końcu mogę rozwiązać problem.

Rozwiązaniem jest:

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

Dodanie opcji -Djava.awt.headless=true mówisz java że jest to wezwanie pośredni, więc nie ma kontrolę nad klawiatura, mysz, itd

+0

Witam, to nie działa dla mnie, próbowałem powyższego kodu, wciąż otrzymuję pustą tablicę dla wyniku –

3

@Trofffnon ma rację. Różnica między uruchamianiem programu z wiersza poleceń a innym programem to zmienne środowiskowe i uprawnienia.

Najpierw sprawdź, czy użytkownik uruchamiający serwer, na którym działa PHP, ma uprawnienia do uruchomienia aplikacji i uzyskania dostępu do odpowiednich plików.

Następnie sprawdzić ścieżkę do

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

Powinieneś raczej zmodyfikować ścieżkę, czyli lepiej określić używając notacji względnej lub bezwzględnej. Jest tak dlatego, że obecny katalog roboczy może być inny w 2 przypadkach.

Powodzenia.

2

Prawie na pewno PHP nie będzie znało ścieżki "java". Jeśli jesteś w Linuksie, uruchom "który java" i wstaw całą ścieżkę do języka Java, którą otrzymasz z powrotem w wywołaniu exec, np.

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