Comment exécuter une commande shell via le code PHP?

J’essaie d’exécuter un fichier Jar dans le backend de mon code php. Mais je ne reçois pas le résultat souhaité. à elle. Je joins le code, s’il vous plaît me suggérer une solution, car quand je l’exécute sur le terminal, il donne une sortie correcte.

Voici le code:

<?php set_time_limit(0); function returnJarPath() { $jarPath = $_SERVER['DOCUMENT_ROOT'] . "myFolder/tools_new/includes/Rank.jar"; return $jarPath; } $jar = returnJarPath(); $command = "java -jar $jar aspdotnet/microsoft.com";//Passing the Argument to the Jar file. $shellOutput = shell_exec($command); print "The Shell Output is : " ; var_dump($shellOutput);print "
"; exec($command,$executeCommmand); print "The Exec returns the value : " ; var_dump($executeCommmand);print "
"; passthru($command,$passthruCommand); print "The Passthru returns the value : " . $passthruCommand. "
"; ?>

J’ai juste vérifié le journal des erreurs d’Apache et la dernière erreur que j’ai trouvée était:

sh: java: commande introuvable

Mais comme je l’ai déjà dit, j’ai utilisé la même commande via SSH pour exécuter la commande Java. Il n’y a donc pas de possibilité de ne pas avoir JAVA installé sur le serveur. Aidez-moi à sortir de cette pagaille …

Si le fichier jar écrit sur la sortie standard, vous pouvez utiliser exec.

Voici un exemple de son utilisation:

 may be first: exec("cd jar dir"); // if jar fine needs to be executed from the same dir $output = exec("/usr/bin/java -jar $jar aspdotnet/microsoft.com"); 

Mais comme vous dites:

 sh: java: command not found 

Cela signifie qu’il n’y a pas d’alias de chemin d’access à Java depuis PHP. Utilisez simplement le chemin java complet vers l’exécutable / usr / bin / java.

Étant donné que vous appelez java . Mon pari est que la sortie est affichée dans la console Java, et non dans le shell, où PHP pourrait extraire les informations textuelles.

Comment résoudre ce dilemme?

Eh bien, vous pouvez écrire les résultats dans un fichier, si vous avez le source java à modifier, puis lisez-le via php pour obtenir les résultats. La possibilité d’une collision ici serait plutôt bonne. L’autre option consiste à faire en sorte que Java se connecte à votre firebase database MySQL (si vous en avez une), puis lancez Java puis interrogez la firebase database pour obtenir la réponse. Bien sûr, il vous faudrait passer Java pour qu’il puisse entrer les données pour insérer un enregistrement que vous pourriez identifier (une sorte de hachage), je ne l’ai jamais fait en Java, juste une théorie sur la façon dont vous pourriez fais-le

Mettre à jour

Vous pouvez également essayer la sortie standard proposée par darko petreski comme une autre option.

Si le code PHP doit être exécuté sur un serveur (et non via la ligne de commande), l’utilisateur qui exécute le fichier exécutable Java est www-data, pas vous. Dans ce cas, assurez-vous que www-data est autorisé à lire le fichier jar et à exécuter l’exécutable java.

La première chose que je voudrais vérifier / modifier est la ligne dans la fonction où vous construisez la variable $jarPath à partir de ceci:

 $jarPath = $_SERVER['DOCUMENT_ROOT'] . "myFolder/tools_new/includes/Rank.jar"; 

pour ça:

 $jarPath = $_SERVER['DOCUMENT_ROOT'] . "/myFolder/tools_new/includes/Rank.jar"; 

La barre oblique $_SERVER['DOCUMENT_ROOT'] peut ne pas être présente dans $_SERVER['DOCUMENT_ROOT'] ce qui pourrait causer des problèmes.

Je suppose que lorsque vous dites qu’il s’exécute depuis la console, vous exécutez la commande Java comme suit:

 $ java -jar /rest/of/path/myFolder/tools_new/includes/Rank.jar aspdotnet/microsoft.com 

Je ferais en sorte d’inclure le chemin d’access au fichier binary Java dans la variable de $command

 $command = "/path/to/java -jar $jar aspdotnet/microsoft.com"; 

L’utilisateur propriétaire du processus de serveur Web peut ne pas avoir de variable $ PATH incluant le chemin d’access au fichier binary Java.