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.
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
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
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