J'ai une Symfony tâche qui génère des fichiers d'appels exec pour un pot et analyse ensuite la sortie. Le pot fonctionne très bien à partir de la ligne de commande, la tâche s'exécute correctement à partir de la ligne de commande.
Le problème:
J'appelle la tâche dans une action fondée sur la soumission d'un formulaire. J'ai l'action de démarrer une nouvelle version de php processus en arrière-plan pour exécuter la tâche indépendamment de ce que la page de la donné naissance à aujourd'hui.
Quand il arrive à la java appeler, dire exec(java -version); il affiche ceci:
Error occurred during initialization of VM
Unable to load native library: libjava.jnilib
Je pense que ça a à voir avec la façon dont je l'appelle php quand j'ai commencer la tâche, mais je suis perdu pour expliquer pourquoi il n'aurait pas les mêmes bibliothèques que lorsque j'utilise la ligne de commande.
Comment puis-je faire d'exécution java à partir de la "toile de fond" de Symfony tâche?
Notes:
Il l'habitude de travailler sans accroc jusqu'à ce que je upraded mamp de 1.9.6 2.0.3.
J'ai regardé: Cassé Java Mac 10.6 mais depuis que j'ai peut fonctionner correctement à partir de la ligne de commande il me semble être un problème différent.
J'ai aussi regardé Exécuter symfony tâche de commande de la shell_exec() de refus d'autorisation , mais je ne pense pas que les autorisations sont la question ici.
Mise à jour:
J'ai réduit le problème de MAMP et arriver à php à partir du navigateur.
<?php
echo exec("java -version")
...
Fonctionne lorsqu'il est appelé à partir de la ligne de commande, mais pas quand le fichier php est ouvert dans le navigateur. Donc la manière de MAMP est configuré à l'origine du problème.
Voici l'environnement de l'info:
- Valeur De La Variable
- SHELL /bin/bash
- TMPDIR /var/folders/YH/YH+uW3hDHZyxQ5AiUtr0T++++TI/-Tmp-/
- Apple_PubSub_Socket_Render /tmp/lancement-3rr9ZI/Render
- L'UTILISATEUR myuser
- COMMAND_MODE unix2003
- SSH_AUTH_SOCK /tmp/lancement-zinaMI/Auditeurs
- __CF_UTILISATEUR_TEXTE_ENCODAGE 0x1F5:0:0
- CHEMIN /usr/bin:/bin:/usr/sbin:/sbin
- PWD /
- HOME /Utilisateurs/myuser
- SHLVL 2
- DYLD_LIBRARY_PATH /Applications/MAMP/Library/lib:
- LOGNAME myuser
- AFFICHAGE /tmp/lancement-FYrw70/org.x:0
- _ /Applications/MAMP/Library/bin/httpd
Dyld semble être présent ici. J'ai besoin de trouver un moyen de la désactiver à partir de mamp de l'environnement.
Résolu
J'ai trouvé une solution. Il semble comme un hack, mais cela a fonctionné. Je vais le poster ici juste au cas où quelqu'un d'autre s'exécute dans le même problème.
Comme Cassé Java Mac 10.6 mentionne le DYLD_LIBRARY_PATH doit être défini. Je ne sais pas pourquoi, il semble nécessaire sur les systèmes Unix, mais pas MacOSX.
Si MAMP définit dans /Applications/MAMP/Library/lib voici comment le désactiver: Modifier /Applications/MAMP/Library/bin/envvars et commenter les lignes suivantes
DYLD_LIBRARY_PATH="/Applications/MAMP/Library/lib:$DYLD_LIBRARY_PATH"
export DYLD_LIBRARY_PATH
De sorte qu'il ressemble à ceci:
#DYLD_LIBRARY_PATH="/Applications/MAMP/Library/lib:$DYLD_LIBRARY_PATH"
#export DYLD_LIBRARY_PATH
Cela devrait corriger le problème et la version 1.6 de java peut fonctionner correctement.
Est-ce un hack? ou est-ce un bug dans MAMP? Merci de répondre si vous connaissez une meilleure façon de résoudre ce problème.