2011-10-04 8 views
28

Mam zadanie Symfony, które generuje niektóre wywołania plików exec do słoika, a następnie analizuje dane wyjściowe. Słoik działa poprawnie z wiersza poleceń, zadanie działa poprawnie z wiersza poleceń.Java 1.6 Uszkodzony po wywołaniu przez zadanie Symfony

Problem:

Wzywam zadania w ramach skargi opartej na złożenie formularza. Mam akcję, która uruchamia nowy proces php w tle, aby uruchomić zadanie, niezależnie od tego, jaką stronę odradza teraz.

Po dojściu do wywołania Java, powiedz exec (java -version); wyprowadza to:

Error occurred during initialization of VM 
Unable to load native library: libjava.jnilib 

Czuję, że ma do czynienia z okazji wzywam php kiedy rozpocząć zadanie, ale jestem zagubiony, dlaczego nie miałyby tych samych bibliotek, jak podczas korzystania z wiersz poleceń.

Jak mogę uruchomić java z zadania Symfony "w tle"?

Uwagi:

on używany do pracy bez żadnych przeszkód aż upraded MAMP od 1.9.6 do 2.0.3.

Sprawdziłem: , ale ponieważ mogę go uruchomić dobrze z wiersza poleceń wydaje się, że jest to inny problem.

Spojrzałem również na Execute symfony task command from the shell_exec() permission denied, ale nie sądzę, że problemem są tutaj uprawnienia.

Aktualizacja:

mam zawężony problemu do MAMP i dotarcie do php z poziomu przeglądarki.

<?php 
echo exec("java -version") 
... 

Działa po wywołaniu z wiersza poleceń, ale nie po otwarciu pliku php w przeglądarce. Tak więc przyczyną problemu jest sposób skonfigurowania MAMP.

Oto info środowiska:

  • Zmienna Wartość
  • SHELL/bin/bash
  • TMPDIR/var/foldery/YH/YH + uW3hDHZyxQ5AiUtr0T ++++ TI/-Tmp-/
  • Apple_PubSub_Socket_Render/tmp/uruchom 3rr9ZI/Render
  • myuser USER
  • COMMAND_MODE unix2003
  • SSH_AUTH_SOCK/tmp/uruchom zinaMI/słuchaczy
  • __CF_USER_TEXT_ENCODING 0x1F5: 0: 0
  • PATH/usr/bin:/bin:/usr/bin:/sbin
  • PWD/
  • HOME/Users/mójużytkownik
  • SHLVL 2
  • DYLD_LIBRARY_PATH/zastosowania/mA/Biblioteki/lib:
  • LOGNAME mójużytkownik
  • WYŚWIETLACZ /tmp/launch-FYrw70/org.x:0
  • _/Applications/MAMP/Library/bin/httpd

Dyld wydaje się być tutaj obecny. Muszę znaleźć sposób na rozbrojenie go ze środowiska mampów.

rozwiązać

Mam zorientowali się rozwiązanie. Wygląda jak włamanie, ale zadziałało. Opublikuję to tutaj, tylko jeśli ktoś inny wpadnie na ten sam problem.

Jako Broken Java Mac 10.6 wzmianki o DYLD_LIBRARY_PATH muszą zostać usunięte. Nie wiem dlaczego, wydaje się, że jest potrzebny w systemach uniksowych, ale nie MacOSX.

Jeśli MAMP zestawy do/Applications/mA/Library/lib Oto jak ją wyłączyć: Edit /Applications/mA/Library/bin/envvars i wypowiedzieć się następujące wiersze

DYLD_LIBRARY_PATH="/Applications/MAMP/Library/lib:$DYLD_LIBRARY_PATH" 
export DYLD_LIBRARY_PATH 

Tak to wygląda następująco:

#DYLD_LIBRARY_PATH="/Applications/MAMP/Library/lib:$DYLD_LIBRARY_PATH" 
#export DYLD_LIBRARY_PATH 

To powinno naprawić problem, a java 1.6 może działać poprawnie.

Czy to hack? czy jest to błąd w MAMP? Odpowiedz, jeśli znasz lepszy sposób rozwiązania tego problemu.

+0

Odp: "Sprawdziłem: [Broken Java Mac 10.6] (http://stackoverflow.com/questions/1482450/broken-java-mac-10-6) ..." -> Sprawdź twoje 'phpinfo (INFO_ENVIRONMENT)' aby sprawdzić środowisko twój proces PHP. Może się różnić od env powłoki poleceń, której użyłeś do ręcznego sprawdzenia, czy możesz uruchomić Javę. – Barend

+0

W której części informacji o środowisku szukam konkretnie? Java działa dobrze wywoływana z php w wierszu poleceń: 'php -r 'exec (" java -version ", $ o); echo $ o; ''echoes:' java version "1.6.0_26" ... 'To jest, gdy odradzam proces php od php, że nie może uruchomić java. Spróbuję sprawdzić, czy ta ścieżka jest inna. – paaat

+0

Zauważyłem coś dziwnego, środowisko zwraca PWD jako symfonyroot/web, ale getcwd zwraca tylko symfonyroot. Nie jestem pewien, czy to jest znaczące. – paaat

Odpowiedz

12

To jest rozwiązanie @paaat dodane. Zamierzam tylko opublikować, aby uzyskać to pytanie z listy bez odpowiedzi.

Wymyśliłem rozwiązanie. Wygląda jak włamanie, ale zadziałało. opublikuj go tutaj, aby zachęcić kogokolwiek innego do tego samego problemu.

Jako uszkodzony Java Mac 10.6 wspomina, że ​​DYLD_LIBRARY_PATH musi być unieważniony. Nie wiem dlaczego, wydaje się być potrzebny w systemach uniksowych, ale nie w systemie MacOSX.

Jeśli ustawia MAMP do/Applications/mA/Library/lib oto jak wyłączyć go: Edit/Programy/mA/Library/bin/envvars i zakomentuj następujące linie

DYLD_LIBRARY_PATH="/Applications/MAMP/Library/lib:$DYLD_LIBRARY_PATH" 
export DYLD_LIBRARY_PATH 

Aby wyglądał tak:

#DYLD_LIBRARY_PATH="/Applications/MAMP/Library/lib:$DYLD_LIBRARY_PATH" 
#export DYLD_LIBRARY_PATH 

To powinno naprawić problem, a java 1.6 może działać poprawnie.

Pamiętaj, aby ponownie uruchomić instalację MAMP, aby zmiany odniosły skutek.

3

To działało! Wersja MAMP biegnę, 2.1.3, jednak ma inną zawartość w pliku:

#if test "x$DYLD_LIBRARY_PATH" != "x" ; then 
# DYLD_LIBRARY_PATH="/Applications/MAMP/Library/lib:$DYLD_LIBRARY_PATH" 
#else 
# DYLD_LIBRARY_PATH="/Applications/MAMP/Library/lib" 
#fi 
#export DYLD_LIBRARY_PATH 
0

Ten pracował dla mnie:

<?php 
    exec('export DYLD_LIBRARY_PATH=""; java -version'); 
?> 

Referencje:
- https://drupal.org/node/1257654
- Calling java from PHP exec

+0

Proszę, nie idź [zamieszczając ** tę samą ** Odpowiedź wokół] (http://stackoverflow.com/search?q=user%3A1130803+DYLD_LIBRARY_PATH). Oznacza to, że pytania są duplikatami, wybierz najlepszy z nich, aby opublikować odpowiedź i oznaczyć pozostałe jako duplikaty tego. – brasofilo

+0

zrobi. Dzięki. –