Вызов Java из PHP Exec - PullRequest
       64

Вызов Java из PHP Exec

6 голосов
/ 10 ноября 2008

Я делаю в PHP следующее:

exec('java -jar "/opt/flex3/lib/mxmlc.jar" +flexlib "/opt/flex3/frameworks" MyAS3App.as -default-size 360 280 -output MyAS3App.swf');

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

Когда я запускаю эту команду из PHP exec, процесс java занимает 100% ЦП и никогда не возвращается.

Есть идеи?

Я также попытался выполнить указанную выше команду с помощью '/ usr / bin / java -Djava.awt.headless = true'.

Я использую Mac OS X 10.5.5, MAMP 1.7, PHP 5.2.5

Ответы [ 4 ]

12 голосов
/ 12 декабря 2008

Оказывается, это была ошибка, специфичная для стека PHP MAMP (http://www.mamp.info/).

Оказывает, что любой вызов JVM после сбоя в MAMP, например ,:

exec('java -version');

Исправление - префикс команды с

export DYLD_LIBRARY_PATH="";

Также я понял, что нет причин использовать этот метод вызова mxmlc.

Итак, последняя рабочая команда:

exec('export DYLD_LIBRARY_PATH=""; mxmlc MyAS3App.as -default-size 360 280 -output MyAS3App.swf');
2 голосов
/ 20 декабря 2010

Мне удается заставить это работать вместе с MAMP. Решение должно было включать:

export DYLD_LIBRARY_PATH="";
in the exec call:

$argss = "export DYLD_LIBRARY_PATH=\"\"; /usr/bin/java -jar /Applications/yourjarfile.jar";
$resultXML = exec($argss, $output);
1 голос
/ 10 ноября 2008

Есть ли причина, по которой вы используете jar-файл mxmlc для компиляции вашего flex-приложения? Вы пытались использовать вместо этого исполняемый файл или задачу ant?

Может быть, компиляция занимает слишком много времени, так что ваш PHP-скрипт истекает?

0 голосов
/ 10 ноября 2008

Exec всегда сложно, на любом языке: -)

Попробуйте:

  • использовать фоновое выполнение (добавить & символ в конце)
  • используйте вместо него shell_exec
  • укажите полный путь к исполняемый файл Java (может быть один доступно для PHP не тот, который вы нужно?)
  • запустить простой HelloWorld Java приложение, чтобы увидеть, если проблема в Java или в mxmlc конкретно

Странно, что Java занимает 100% процессорного времени. Я не могу объяснить это какой-либо распространенной ошибкой, допущенной при использовании exec () ... попробуйте отправить SIGQUIT для создания дампов, а затем прочитать дамп - может быть, вы что-нибудь выясните.

...