У меня есть задача Symfony, которая генерирует некоторые вызовы exec в jar, а затем анализирует вывод. Консоль отлично работает из командной строки, задача отлично работает из командной строки.
Проблема:
Я вызываю задачу в действии, основанном на представлении формы. У меня есть действие, запускающее новый php-процесс в фоновом режиме для запуска задачи независимо от того, какая страница она породила.
Когда он попадает на вызов java, скажем exec (java -version); он выводит это:
Error occurred during initialization of VM Unable to load native library: libjava.jnilib
Я чувствую, что это связано с тем, как я вызываю php, когда я запускаю задачу, но я не понимаю, почему у нее не будет таких же библиотек, как при использовании командной строки.
Как я могу запустить java из задачи «background» Symfony?
Примечания :
Раньше это работало без задержек, пока я не поднял мачту с 1,9,6 до 2,0,3.
Я смотрел: Broken Java Mac 10.6, но так как я могу запустить его из командной строки, это, похоже, другая проблема.
Я также посмотрел на команду выполнения Execute symfony из разрешения shell_exec (), но я не думаю, что разрешения здесь проблемы.
Обновить:
Я сузил проблему до MAMP и добрался до php из браузера.
<?php echo exec("java -version") ...
Будет работать при вызове из командной строки, но не при открытии php-файла через браузер. Таким образом, способ, которым настроен MAMP, вызывает проблему.
Вот информация об окружающей среде:
Дайлд, кажется, присутствует здесь. Мне нужно найти способ отключить его от среды мама.
решаемая
Я выяснил решение. Это похоже на взлома, но это сработало. Я отправлю его здесь, просто если кто-нибудь еще столкнется с той же проблемой.
Так как Broken Java Mac 10.6 упоминает, что DYLD_LIBRARY_PATH должен быть отменен. Не уверен, почему, похоже, это необходимо для Unix-систем, но не для MacOSX.
Если MAMP устанавливает / Applications / MAMP / Library / lib, вот как отключить его: Edit / Applications / MAMP / Library / bin / envvars и прокомментировать следующие строки
DYLD_LIBRARY_PATH="/Applications/MAMP/Library/lib:$DYLD_LIBRARY_PATH" export DYLD_LIBRARY_PATH
Чтобы это выглядело так:
#DYLD_LIBRARY_PATH="/Applications/MAMP/Library/lib:$DYLD_LIBRARY_PATH" #export DYLD_LIBRARY_PATH
Это должно устранить проблему, и java 1.6 может работать нормально.
Это взломать? или это ошибка в MAMP? Пожалуйста, ответьте, если вы знаете лучший способ решить эту проблему.
Это решение @paaat добавлено. Я просто отправляю сообщение, чтобы получить этот вопрос из списка без ответа.
Я выяснил решение. Это похоже на взлома, но это сработало. Я отправлю его здесь, просто если кто-нибудь еще столкнется с той же проблемой.
Так как Broken Java Mac 10.6 упоминает, что DYLD_LIBRARY_PATH должен быть отменен. Не уверен, почему, похоже, это необходимо для Unix-систем, но не для MacOSX.
Если MAMP устанавливает / Applications / MAMP / Library / lib, вот как отключить его: Edit / Applications / MAMP / Library / bin / envvars и прокомментировать следующие строки
DYLD_LIBRARY_PATH="/Applications/MAMP/Library/lib:$DYLD_LIBRARY_PATH" export DYLD_LIBRARY_PATH
Чтобы это выглядело так:
#DYLD_LIBRARY_PATH="/Applications/MAMP/Library/lib:$DYLD_LIBRARY_PATH" #export DYLD_LIBRARY_PATH
Это должно устранить проблему, и java 1.6 может работать нормально.
Обязательно перезапустите установку MAMP, чтобы изменения вступили в силу.
Это сработало! Версия MAMP, которую я запускаю, 2.1.3, однако имеет другое содержимое в файле:
#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
Это сработало для меня:
<?php exec('export DYLD_LIBRARY_PATH=""; java -version'); ?>
Рекомендации:
– https://drupal.org/node/1257654
– Вызов java из PHP exec