2011-10-04 7 views
28

Tengo una tarea de Symfony que genera algunas llamadas de archivos ejecutables a un contenedor y luego analiza el resultado. El jar se ejecuta bien desde la línea de comandos, la tarea se ejecuta correctamente desde la línea de comandos.Java 1.6 Roto cuando se lo llama por fondo Tarea de Symfony

El problema:

llamo la tarea en una acción basada en un envío del formulario. Tengo la acción de comenzar un nuevo proceso de php en segundo plano para ejecutar la tarea independientemente de la página que generó ahora.

Cuando se trata de la llamada java, diga exec (java -version); se da salida a esto:

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

siento que tiene que ver con la forma en que llamo php cuando comienzo a la tarea, pero estoy perdido en cuanto a porqué no tendría las mismas bibliotecas como cuando se utiliza la línea de comando.

¿Cómo puedo hacer que Java se ejecute desde la tarea Symfony 'de fondo'?

Notas:

Se utiliza para trabajar con ningún tirón hasta que upraded MAMP de 1.9.6 a 2.0.3.

He visto: Broken Java Mac 10.6 pero como puedo ejecutarlo bien desde la línea de comandos, parece ser un problema diferente.

También he visto Execute symfony task command from the shell_exec() permission denied pero no creo que los permisos sean el problema aquí.

Actualización:

he reducido el problema a MAMP y llegar a PHP desde el navegador.

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

funcionará cuando se llama desde la línea de comandos, pero no cuando el archivo php se abre a través del navegador. Entonces, la forma en que MAMP está configurado está causando el problema.

Aquí está la información de medio ambiente:

  • Variable Valor
  • SHELL/bin/bash
  • TMPDIR/var/carpetas/YH/YH + ++++ uW3hDHZyxQ5AiUtr0T TI/-Tmp-/
  • Apple_PubSub_Socket_Render/tmp/lanzamiento 3rr9ZI/Render
  • miUsuario USUARIO
  • COMMAND_MODE unix2003
  • SSH_AUTH_SOCK/tmp/Launch-zinaMI/oyentes
  • __CF_USER_TEXT_ENCODING 0x1F5: 0: 0
  • PATH/usr/bin:/bin:/usr/sbin:/sbin
  • PWD/
  • INICIO/Usuarios/miUsuario
  • SHLVL 2
  • DYLD_LIBRARY_PATH/Aplicaciones/MAMP/Library/lib:
  • LOGNAME miUsuario
  • DISPLAY /tmp/launch-FYrw70/org.x:0
  • _/Applications/MAMP/Library/bin/httpd

Dyld parece estar presente aquí. Necesito encontrar una manera de desarmarlo del entorno de mamp.

Resuelto

que he descubierto una solución. Parece un truco, pero funcionó. Lo publicaré aquí solo en caso de que alguien más se encuentre con el mismo problema.

Como Broken Java Mac 10.6 menciona que DYLD_LIBRARY_PATH debe estar desarmado. No estoy seguro de por qué, parece ser necesario en sistemas Unix pero no en MacOSX.

Si MAMP establece a/Aplicaciones/MAMP/Library/lib Así es como para desactivarlo: Editar /Aplicaciones/MAMP/Library/bin/envvars y comente las siguientes líneas

DYLD_LIBRARY_PATH="/Applications/MAMP/Library/lib:$DYLD_LIBRARY_PATH" 
export DYLD_LIBRARY_PATH 

Así que se ve así:

#DYLD_LIBRARY_PATH="/Applications/MAMP/Library/lib:$DYLD_LIBRARY_PATH" 
#export DYLD_LIBRARY_PATH 

Esto debería solucionar el problema y java 1.6 puede funcionar bien.

¿Es esto un truco? o es esto un error en MAMP? Por favor, responda si conoce una mejor manera de resolver este problema.

+0

: "He visto: [Broken Java Mac 10.6] (http://stackoverflow.com/questions/1482450/broken-java-mac-10-6) ..." -> Comprobar su 'phpinfo (INFO_ENVIRONMENT)' para verificar el entorno de tu proceso PHP Puede ser diferente del env del shell de comando que utilizó para verificar manualmente si puede ejecutar Java. – Barend

+0

¿Qué parte de la información del entorno estoy buscando específicamente? Java funciona bien llamado desde php en la línea de comando: 'php -r 'exec (" java -version ", $ o); echo $ o; '' echoes: 'java version" 1.6.0_26 "...' Es cuando genero el proceso php de php que no puede ejecutar java. Trataré de ver si ese camino es diferente. – paaat

+0

He notado algo extraño, el entorno devuelve PWD como symfonyroot/web pero getcwd solo devuelve symfonyroot. No estoy seguro de si esto es significativo. – paaat

Respuesta

12

Esta es la solución de @paaat añadida. Solo estoy publicando para obtener esta pregunta de la lista no respondida.

He encontrado una solución. Parece un truco, pero funcionó. Voy a publicarlo aquí solo en caso de que alguien más se encuentre con el mismo problema.

Como Broken Java Mac 10.6 menciona que DYLD_LIBRARY_PATH debe estar desarmado. No estoy seguro de por qué, parece ser necesario en sistemas Unix pero no en MacOSX.

Si MAMP establece a/Aplicaciones/MAMP/Library/lib aquí es cómo desactivar TI: Editar/Aplicaciones/MAMP/Library/bin/envvars y comente las siguientes líneas

DYLD_LIBRARY_PATH="/Applications/MAMP/Library/lib:$DYLD_LIBRARY_PATH" 
export DYLD_LIBRARY_PATH 

de manera que se parezca a esto:

#DYLD_LIBRARY_PATH="/Applications/MAMP/Library/lib:$DYLD_LIBRARY_PATH" 
#export DYLD_LIBRARY_PATH 

esto debería solucionar el problema y java 1.6 puede funcionar bien.

Asegúrese de reiniciar su instalación de MAMP para que los cambios surtan efecto.

3

Esto funcionó! La versión de MAMP estoy corriendo, 2.1.3, sin embargo, tiene un diferente contenido en el archivo:

#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

Esto funcionó para mí:

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

Referencias:
- https://drupal.org/node/1257654
- Calling java from PHP exec

+0

Por favor, no vayas [publicando ** la misma ** respuesta alrededor] (http://stackoverflow.com/search?q=user%3A1130803+DYLD_LIBRARY_PATH). Eso significa que las Preguntas son duplicadas, elija la mejor para publicar su respuesta y marque las otras como duplicadas de esa. – brasofilo

+0

va a hacer. Gracias. –

Cuestiones relacionadas