Вызов java из PHP exec


Я делаю следующее на 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

Author: Owen, 2008-11-10

4 answers

Оказывается, это была ошибка, характерная для стека 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');
 12
Author: Keeth, 2008-12-12 18:45:15

Мне удается заставить это работать вместе с 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);
 2
Author: Pontus, 2011-12-15 20:40:41

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

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

 1
Author: mmattax, 2008-11-10 19:27:08

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

Попробуйте:

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

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

 0
Author: Vladimir Dyuzhev, 2008-11-10 19:37:48