2010-09-24 5 views
1

Si je lanceExécution shell_exec ('qui java') en retour de PHP ne

which java 

de la ligne de commande, je reçois l'entrée appropriée (/usr/java/.../bin/java). Toutefois, si je le lance dans un script php:

<? 
    echo 'java. ' . shell_exec('which java'); 
    echo 'ls. ' . shell_exec('which ls'); 
?> 

rien ne s'imprimé pour lequel java mais je reçois les résultats appropriés pour lesquels ls ...

+8

Le processus serveur n'a pas son ensemble de variables d'environnement de chemin. –

+0

Si j'envoie le chemin codé en dur cela fonctionne. J'ai ensuite essayé de l'inclure dans un script de fichier bash avec la configuration de l'environnement et cela n'a pas fonctionné non plus ... –

Répondre

2

Deux choses sont nécessaires:

  • le chemin d'accès complet à la machine virtuelle Java (il n'était pas défini dans l'environnement)
  • "2> & 1" à la fin de la ligne de commande.

Ainsi, par exemple:

echo shell_exec('/usr/java/jdk6/bin/java -cp myJars.jar MyMainClass arg1 2>&1"); 
+0

Merci, juste ce que je cherchais au cours des 30 dernières minutes. Ajout du 2> & 1 travaillé. Je ne sais pas pourquoi ... – giorgio79

1

Je viens de rencontrer ce problème aussi bien. J'essayais de déterminer si l'utilitaire qrencode est installé sur le (n'importe quel) serveur, et sinon, log/warn/exit gracieusement. Considérant que le programme devrait toujours être dans un chemin standard, j'ai préfixé la commande which avec les emplacements probables du binaire, tout en respectant le fait que $PATH pourrait être défini d'une manière ou d'une autre sur le système. Je pense que vous pouvez également utiliser cette approche avec des chemins Java communs:

shell_exec('PATH="$PATH:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin" '. 
      'which qrencode');