2008-11-10 25 views
6

estoy haciendo lo siguiente en PHP:llamar a Java desde PHP exec

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 comandos, funciona muy bien y termina en un segundo o dos.

Cuando ejecuto este comando desde PHP exec, el proceso java toma 100% de CPU y nunca regresa.

¿Alguna idea?

También intenté ejecutar el comando anterior con '/ usr/bin/java -Djava.awt.headless = true'.

estoy corriendo Mac OS X 10.5.5, MAMP 1.7, PHP 5.2.5

Respuesta

12

Resulta que era un error específico de la pila PHP MAMP (http://www.mamp.info/).

Resulta que cualquier invocación de la JVM siguiente falla bajo MAMP, por ejemplo:

exec('java -version'); 

La solución es un prefijo al comando con

export DYLD_LIBRARY_PATH=""; 

También me di cuenta de que no hay razón para usar ese método de invocar mxmlc.

Así que aquí está la orden final, trabajando:

exec('export DYLD_LIBRARY_PATH=""; mxmlc MyAS3App.as -default-size 360 280 -output MyAS3App.swf'); 
+2

¡Guau, esto me salvó el día! ¡Gracias! – thSoft

+1

Si aún no obtiene ninguna salida, agregue 2> y 1 al final, es decir, exec ('java -version 2> &1'); –

1

¿Hay una razón por la cual el uso del archivo jar mxmlc 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 de espera?

+0

No es un tiempo de espera. Dijo que toma 2 segundos compilarlo desde la línea de comandos. –

+0

cuando intento compilar con hormiga obtengo el mismo resultado – Keeth

+0

también cuando intento compilar con el ejecutable mxmlc obtengo el mismo – Keeth

0

Exec siempre es complicado, en cualquier idioma :-)

Trata de:

  • uso ejecución en segundo plano (añadir & símbolo al final)
  • uso shell_exec lugar
  • especifique la ruta completa al ejecutable de Java (puede ser el que está disponible para PHP no es el que necesita ?)
  • plazo un simple HelloWorld java aplicación para ver si el problema es en Java o en mxmlc específicamente

Es extraño que Java tiene 100% de la 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.

2

me las arreglo para conseguir que esto funcione togheter con MAMP. La solución era incluir el:

export DYLD_LIBRARY_PATH=""; 
in the exec call: 

$argss = "export DYLD_LIBRARY_PATH=\"\"; /usr/bin/java -jar /Applications/yourjarfile.jar"; 
$resultXML = exec($argss, $output);