-
Android et PHP
Bonjour,
Je suis actuellement en stage et je travaille sur un site web en php qui doit générer des applications mobiles en java. Mon problème : impossible d'exécuter des commandes android depuis PHP. Ce bout de code provient de mon controller.php.
putenv("ANDROID_SDK_ROOT=/opt/android-sdk-19.0");
putenv("PATH=$PATH:$ANDROID_SDK_ROOT/platform-tools");
putenv("PATH=$PATH:$ANDROID_SDK_ROOT/tools");
//shell_exec("cd genarate/$appid/$appname/src;mkdir natacha");
$cmd="android update project --target 1 --name Myproject --path ./genarate/$appid/$appname";
shell_exec($cmd);
C'est étrange car cette commande //shell_exec("cd genarate/$appid/$appname/src;mkdir natacha");
créer bien "natacha". De plus, depuis le terminal ma commande android update fonctionne.
Pour essayer de résoudre mon problème j'ai créer un script bash et qui est appelé depuis controller.php:
#!/bin/bash
date > /tmp/last.jnk
echo"Hello le monde">> /tmp/last.jnk
date >> /tmp/last.jnk
echo"goodbye">> /tmp/last.jnk
env >> /tmp/last.jnk
env| grep ANDROID >> /tmp/last.jnk
J'obtiens :
[natacha@call1669 geodiva]$ cat /tmp/last.jnk
Hello le monde
goodbye
Des idées svp? Merci d'avance
-
Est-ce que c'est une application CLI? À y réflechir comme ça (mais sans certitude), je ne suis pas sûr qu'utiliser putenv() en mode serveur (CGI/php-fpm etc...) modifie les variables utilisables par android.
Mets le code dans un script CLI, un fichier exécutable avec un shebang #!/usr/bin/php, puis exécute ce fichier depuis ton controlleur.
-
Bonjour et merci pour votre réponse. Non, ce n'est pas une application CLI. J'ai quand même fais ce que vous m'avez proposé et ça ne fonctionne pas
-
Et si tu lances le script CLI directement depuis la console? Le script CLI doit contenir non seulement les putenv, mais aussi shell_exec.
Autre solution: fais un script bash pour définir les variables d'environnement, puis lancer ce script et exécuter android update depuis le script PHP.
-
essayez de mettre un chemin absolu pour l'exécutable android
-
Merci à vous deux le problème est partiellement réglé. Maintenant j'ai ce message d'erreur :
Error occurred during initialization of VM
Could not reserve enough space for code cache
C'est étrange car si je lance la même commande depuis le terminal, et non depuis le script php, tout fonctionne...
-
Est-ce que tu peux poster la solution que tu as utilisée pour régler le précédent problème? La réponse à la 2e question dépend (peut-être) de la première.
-
La voici:
#!/bin/bash
export android=/opt/android-sdk-19.0/
export PATH=$PATH:$ANDROID_SDK_ROOT/platform-tools
export PATH=$PATH:$ANDROID_SDK_ROOT/tools
export PATH=/usr/lib64/qt-3.3/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/opt/android-sdk-19.0/platform-tools:/opt/android-sdk-19.0/tools:/home/natacha/bin
export ANDROID_SWT=/opt/android-sdk-19.0/tools/lib/x86_64/
env | grep android > /tmp/last.jnk
android list targets >> /tmp/last.jnk
Lorsque je rajoute cette ligne : export _JAVA_OPTIONS=/usr/bin/java => le message d'erreur disparaît mais il ne se passe rien.
-
quand rien ne s'affiche, il faut faire comme pour n'importe quel langage de développement : afficher le contenu de variables ou n'importe quel texte, ligne après ligne, pour trouver à quel endroit est le problème
-
Possible idée: android update épuise la mémoire alloué par PHP lorsqu'il est appelé depuis un script php.
Au lieu de shell_exec, utilise system.