web-dev-qa-db-fra.com

Exécutez Java fichier de classe à partir de PHP sur un site Web

J'ai un site Web et je veux pouvoir permettre à l'utilisateur d'exécuter un fichier Java sur le serveur à partir du site Web.

Je veux que l'utilisateur clique sur un bouton qui exécutera 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 Java depuis PHP et renvoyez le standard à partir du fichier Java PHP site web en temps réel)?

Mise à jour:

Merci pour les réponses sur la façon d'exécuter le programme Java de PHP. Cependant, je veux également pouvoir, car le programme Java imprime sur stdout où il imprimera beaucoup de texte pendant son exécution, pour pouvoir l'imprimer sur la page Web afin que l'utilisateur puisse voir à quelle étape le programme Java est en cours d'exécution).

Comment cela peut-il être fait et nécessite-t-il des AJAX ou JavaScript ou quelque chose comme ça?)

45
tree-hacker

La fonction PHP exec() est le chemin à parcourir, mais vous devez être très attention dans ce que vous permet d'exécuter .. en d'autres termes, ne comptez pas sur les entrées de l'utilisateur car cela pourrait potentiellement compromettre l'ensemble de votre serveur.

En appelant le lanceur d'application Java à l'aide de exec, vous pouvez exécuter n'importe quelle application Java à partir de PHP, par ex.

<?php exec("Java -jar file.jar arguments", $output); ?>
48
James Goodwin

Puisque vous mentionnez le temps réel, je vous suggère de configurer un PHP to Java Bridge. L'initialisation de la JVM à chaque demande prend beaucoup de ressources).

Pont PHP/Java

Le pont PHP/Java est une implémentation d'un protocole de réseau en continu basé sur XML, qui peut être utilisé pour connecter un moteur de script natif, par exemple PHP, Scheme ou Python, avec un Java ou Machine virtuelle ECMA 335. Elle est jusqu'à 50 fois plus rapide que le RPC local via SOAP, nécessite moins de ressources côté serveur Web. Elle est plus rapide et plus fiable que la communication directe via le Java Native Interface, et il ne nécessite aucun composant supplémentaire pour invoquer les procédures Java de PHP ou PHP procédures de Java).

16
Peter Lindqvist

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

Sinon, si l'appel envoie beaucoup de texte à la sortie standard ou si la classe doit être exécutée sur le serveur à cause des dépendances du système, appeler de php exec est le chemin à parcourir, mais vous aurez probablement besoin de quelque chose comme cometd pour afficher le texte sur le client en temps réel. Il existe des implémentations pour diverses boîtes à outils javascript telles que Dojo ou jQuery.

Côté serveur, il semble y avoir une implémentation cometd en php ici .

J'espère que ça aide...

Philippe

5
Philippe

Consultez exec et l'autre fonctions d'exécution du programme . Mais faites cela très avec précaution, ou c'est une recette pour les exploits.

4
Bobby Jack

La fonction relais est-elle utile?

http://www.php.net/manual/en/function.passthru.php

2
brianjd