2010-01-24 11 views
42

J'ai un site Web et je veux être en mesure de permettre à l'utilisateur d'exécuter un fichier Java sur le serveur à partir du site Web.Exécuter un fichier de classe Java à partir du script PHP sur un site Web

Je veux que l'utilisateur clique sur un bouton qui va exécuter le fichier Java sur le serveur ET tout ce qui est imprimé en standard par le programme Java sera imprimé sur le site Web pour que l'utilisateur puisse le voir.

Comment cela peut-il être fait (appelez le programme Java de PHP et renvoyez le standard depuis le fichier Java vers le site PHP en temps réel)?

Mise à jour:

Merci pour les réponses sur la façon d'exécuter le programme Java depuis PHP. Cependant, je veux aussi pouvoir, car le programme Java est en train d'imprimer sur stdout où il va imprimer beaucoup de texte en cours d'exécution, pour pouvoir l'imprimer sur la page web afin que l'utilisateur puisse voir à quel stade le Programme Java est dans son exécution.

Comment cela peut-il être fait et nécessite-t-il de l'AJAX ou du JavaScript supplémentaire ou quelque chose comme ça?

Répondre

44

La fonction PHP exec() est le chemin à parcourir, mais vous devriez être très attention à ce que vous permettent d'exécuter .. autrement dit ne faut pas compter sur l'entrée de l'utilisateur car il pourrait compromettre votre serveur entier.

Appel du lanceur d'applications Java à l'aide d'exec, vous pouvez exécuter n'importe quelle application Java à partir de PHP, par ex.

<?php exec("java -jar file.jar arguments", $output); ?> 
+1

HI james, exécution java me donne erreur refusé la permission. mon utilisateur est apache. –

14

Puisque vous mentionnez en temps réel, je suggère la mise en place d'un PHP à Java Bridge. L'initialisation de la JVM à chaque requête nécessite beaucoup de ressources.

PHP/Java Bridge

Le pont PHP/Java est une implémentation d'un streaming, protocole de réseau basé sur XML, qui peut être utilisé pour connecter un script natif moteur , par exemple PHP, schéma ou Python, avec une machine virtuelle Java ou ECMA 335 . Il est jusqu'à 50 fois plus rapide que RPC local via SOAP, nécessite moins de ressources sur le côté serveur Web . Il est plus rapide et plus fiable que communication directe via le Java Native Interface , et il ne nécessite pas de composants supplémentaires invoquer Java procédures de PHP ou des procédures PHP de Java.

4

Je préfère envelopper la classe Java dans un applet Java, qui peut ensuite être invoqué à partir d'un appel javascript côté client: voir http://www.rgagnon.com/javadetails/java-0170.html

Dans le cas contraire, si l'appel jette beaucoup de texte à la sortie standard ou la classe doit être exécutée sur le serveur en raison des dépendances du système, l'appel de php exec est le chemin à suivre, mais vous aurez probablement besoin de quelque chose comme pour afficher le texte sur le client en temps réel. Il existe des implémentations pour divers toolkits javascript tels que Dojo ou jQuery.

Pour le côté serveur, il semble y avoir une implémentation de cometd dans php here.

J'espère que cette aide ...

Philippe

Questions connexes