2010-09-10 5 views
8

J'essaie d'exécuter un fichier Jar dans le backend de mon code php.Mais je ne reçois pas la sortie désirée.Il y a un fichier jar qui s'exécute en arrière-plan et renvoie le Page Rank de l'un des mots clés et Domaine qui lui est donné. Je joins le code, merci de me suggérer une solution, parce que quand je le lance sur le terminal, il donne une sortie correcte.Comment lancer une commande shell via le code PHP?

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 "<br />"; 
exec($command,$executeCommmand); 
    print "The Exec returns the value : " ; var_dump($executeCommmand);print "<br />"; 
passthru($command,$passthruCommand); 
    print "The Passthru returns the value : " . $passthruCommand. "<br />"; 
?> 

Je viens de vérifier l'erreur de apache journal et la dernière erreur que j'ai trouvé:

sh: java: command not found

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 aucune possibilité de ne pas avoir JAVA installé sur le serveur. S'il vous plaît aidez-moi de ce gâchis ...

+0

Avez-vous une sortie quelconque? Des erreurs? – Buggabill

+0

@Buggabill: Non. Pas par Php mais j'obtiens la bonne sortie via Terminal (Console). –

Répondre

3

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

Voici un exemple que je l'utilise:

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 le dites:

sh: java: command not found 

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

+0

Comment devrais-je utiliser votre façon de résoudre mon problème? –

+0

d'abord trouver le chemin de Java sur la commande linux promtp avec cette commande: qui java. Il renverra/usr/bin/java. Utilisez-le comme un chemin complet dans votre commande "/ usr/bin/java -jar $ jar aspdotnet/microsoft.com". Aussi, vous devrez peut-être cd dans le répertoire jar si vous le souhaitez par le pot. – darpet

+0

Déjà fait cela ... et cela a fonctionné. Merci un paquet Darco! –

0

É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 la source java à modifier, puis lire ce fichier via php pour obtenir les résultats. La possibilité d'une collision ici serait plutôt bonne. L'autre option est d'avoir Java se connecter à votre base de données MySQL (si vous en avez un), puis exécutez le Java puis interroger la base de données pour la réponse. Bien sûr, vous devrez passer à Java un moyen d'entrer les données pour insérer un enregistrement que vous pourriez identifier (un hachage de quelque sorte), je n'ai jamais fait cela en Java, juste une théorie de la façon dont vous pouvez pour le faire.

Mise à jour

Vous pouvez essayer la sortie standard comme suggéré par darko petreski comme une autre option.

0

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

+0

Le message d'erreur dit "java: commande introuvable", pas sur les privilèges. – darpet

0

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

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

à ceci:

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

Le slash ne peut être présent dans $_SERVER['DOCUMENT_ROOT'] ce qui pourrait causer des problèmes.

Je suppose que lorsque vous dites qu'il va de la console, vous exécutez la commande java comme ceci:

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

Je veillerai à ce que vous incluez le chemin vers le binaire java dans la variable $command comme alors ...

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

l'utilisateur qui est propriétaire du processus serveur Web peut ne pas avoir une variable $ PATH qui inclut le chemin vers le binaire Java.

Questions connexes