Java 1.6 не работает при вызове фоновой задачи Symfony - PullRequest
28 голосов
/ 04 октября 2011

У меня есть задача Symfony, которая генерирует некоторые файлы, вызывает exec для jar, а затем анализирует вывод.Jar работает нормально из командной строки, задача выполняется из командной строки.

Проблема:

Я вызываю задачу в действии, основанном на формепредставление.У меня есть действие, запускающее новый php-процесс в фоновом режиме, чтобы запустить задачу независимо от того, какую страницу она порождает.

Когда он достигает вызова java, произнесите exec (java -version);он выводит это:

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

Я чувствую, что это связано с тем, как я вызываю php, когда запускаю задачу, но я заблудился, почему у него не будет таких библиотек, как когдаиспользуйте командную строку.

Как запустить Java из «фоновой» задачи Symfony?

Примечания :

Используется для работы снет проблем, пока я не обновил mamp с 1.9.6 до 2.0.3.

Я смотрел на: Сломанный Java Mac 10.6 , но, поскольку я могу запустить его из командной строки, кажется,это может быть другой проблемой.

Я также рассмотрел Выполнить команду задачи symfony из запрета shell_exec (), отклонено , но я не думаю, что разрешения - это проблема здесь.

Обновление:

Я сузил проблему до MAMP и доступа к php из браузера.

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

Будет работать при вызове из командыстрока, но не когда файл php открывается через браузер.Таким образом, способ настройки MAMP вызывает проблему.

Вот информация об окружении:

  • Значение переменной
  • SHELL / bin / bash
  • TMPDIR / var / folder / YH / YH + uW3hDHZyxQ5AiUtr0T ++++ TI / -Tmp - /
  • Apple_PubSub_Socket_Render / tmp / launch-3rr9ZI / Render
  • USER myuser * 1050COMMAND_MODE unix2003
  • SSH_AUTH_SOCK / tmp / launch-zinaMI / Listeners
  • __ CF_USER_TEXT_ENCODING 0x1F5: 0: 0
  • PATH / usr / bin: / bin: / usr / sbinsbin
  • PWD /
  • ГЛАВНАЯ / Пользователи / myuser
  • SHLVL 2
  • DYLD_LIBRARY_PATH / Приложения / MAMP / Библиотека / lib:
  • LOGNAME myuser
  • DISPLAY /tmp/launch-FYrw70/org.x:0
  • _ / Applications / MAMP / Library / bin / httpd

Кажется, Дилдуприсутствовать здесь.Мне нужно найти способ удалить его из среды мэмпа.

Решено

Я нашел решение.Это похоже на взлом, но это сработало.Я опубликую это здесь, только если кто-то еще столкнется с той же проблемой.

Как Сломанный 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?Пожалуйста, ответьте, если вы знаете лучший способ решить эту проблему.

Ответы [ 3 ]

12 голосов
/ 20 марта 2012

Это решение @paaat добавлено. Я просто пишу, чтобы убрать этот вопрос из списка без ответа.

Я нашел решение. Это похоже на взлом, но это сработало. Больной опубликуйте это здесь, только если кто-то еще столкнется с той же проблемой.

Как упоминает Broken Java Mac 10.6, DYLD_LIBRARY_PATH должен быть не установлен. Не уверен, почему, похоже, это необходимо в системах Unix, но не в MacOSX.

Если MAMP установлен в / Applications / MAMP / Library / lib, вот как отключить это: Изменить / Приложения / MAMP / Библиотека / 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, чтобы изменения вступили в силу.

3 голосов
/ 27 марта 2013

Это сработало!Версия 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
0 голосов
/ 30 мая 2014

Это сработало для меня:

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

Ссылки:
- https://drupal.org/node/1257654
- Вызов Java из PHP exec

...