Llamar a Java desde el ejecutivo de PHP
flex exec (4)
Resulta que era un error específico de la pila PHP MAMP ( http://www.mamp.info/ ).
Desactiva cualquier invocación de la siguiente JVM bajo MAMP, por ejemplo:
exec(''java -version'');
La solución es prefijar el comando con
export DYLD_LIBRARY_PATH="";
También me di cuenta de que no hay ninguna razón para usar ese método de invocación de mxmlc.
Así que aquí está el último comando de trabajo:
exec(''export DYLD_LIBRARY_PATH=""; mxmlc MyAS3App.as -default-size 360 280 -output MyAS3App.swf'');
Estoy haciendo lo siguiente en PHP:
exec(''java -jar "/opt/flex3/lib/mxmlc.jar" +flexlib "/opt/flex3/frameworks" MyAS3App.as -default-size 360 280 -output MyAS3App.swf'');
Cuando ejecuto esto desde la línea de comando, funciona bien y termina en uno o dos segundos.
Cuando ejecuto este comando desde PHP exec, el proceso java toma 100% de CPU y nunca regresa.
¿Algunas ideas?
También intenté ejecutar el comando anterior con ''/ usr / bin / java -Djava.awt.headless = true''.
Estoy ejecutando Mac OS X 10.5.5, MAMP 1.7, PHP 5.2.5
¿Hay algún motivo por el que utilice el archivo mxmlc jar para compilar su aplicación flex? ¿Has intentado utilizar el ejecutable o una tarea ant, en su lugar?
¿Tal vez la compilación demora demasiado para que su script PHP agote el tiempo?
Exec siempre es complicado, en cualquier idioma :-)
Intentar:
- usar la ejecución de fondo (agregar y símbolo al final)
- use shell_exec en su lugar
- especifica la ruta completa al ejecutable de Java (¿la que está disponible para PHP no es la que necesitas?)
- ejecutar una aplicación java HelloWorld simple para ver si el problema está en Java o en mxmlc específicamente
Es extraño que Java tome 100% de CPU. No puedo explicarlo con ningún error común al usar exec () ... intentar enviar un SIGQUIT para volcar los hilos, luego leer el volcado, puede ser que usted resuelva algo.
Logré hacer que esto funcione junto con MAMP. La solución fue incluir lo siguiente:
export DYLD_LIBRARY_PATH="";
in the exec call:
$argss = "export DYLD_LIBRARY_PATH=/"/"; /usr/bin/java -jar /Applications/yourjarfile.jar";
$resultXML = exec($argss, $output);