Léa-Linux & amis :   LinuxFR   GCU-Squad   GNU
PHP - exécuter un programme situé sur une machine distante à partir d'un serveur web apache
Envoyé par: Tinyturtle

Bonjour à tous,

Après quelques recherche sur le forum et google, je n'ai pu trouver de réponses ou de pistes à mon problème.

Je suis actuellement en train de développer une plateforme intranet/internet en PHP qui exécute doit exécuter des programmes binaires situés sur un serveur de calcul distant. Actuellement, j'arrive à exécuter et exploiter mes programmes binaires lorsqu'ils sont situés sur le même serveur que le serveur Web via la commande PHP "passthru" avec comme paramètre le chemin vers le binaire.

Le souci et qu'il faudra à terme déporter les binaires sur un autre serveur que le serveur web pour l'alléger un peu, car un serveur web ne doit pas être un serveur de calcul.

Théoriquement, le serveur de calcul est identifié par son adresse ip, alors j'ai quelques idées mais je ne sais comment les mettre en oeuvre SIMPLEMENT.

Actuellement, je mets dans mes scripts PHP grosso modo, le code suivant:

Citation

function exec_cmd($cmd)
{
ob_start();
passthru($cmd);
$result=ob_get_contents();
ob_end_clean();
print_debug_msg($cmd."==>".$return_var);
return $result;
}

sachant que $cmd prend pour valeur une chaine de caractère comme : "/path_binary_programs/my_binary_prog first_param".

Mes idées sont les suivantes:
- Déléguer la gestion réseau à Unix en:
* Monter un système NFS ou Samba avec le chemin vers mes binaires... (Ca me plait moyennement)
* Utiliser une commande schell du style: //IP_address/path_binary_programs/my_binary_prog first_param
- Utiliser une fonction d'une bibliothèque PHP qui gère le réseau afin de faire quelque chose du genre:
* network_cmd($cmd,$ip_address);

Seulement voilà, la solution NFS/Samba ne me plait pas de trop, et pour les autres, je ne sais pas s'il est possible de faire cela sans monter de système de fichiers réseaux (NFS) et quelle serait la syntaxe et la méthodologie à suivre. Quant à la bibliothèque PHP, je ne sais pas si ça existe et si c'est le cas quelle serait la bibliothèque à utiliser et comment la mettre en oeuvre.

Merci aux ames charitables qui pourront et sauront me répondre.

J'ai posé volontairement ce post dans les forums Administration et Développement, car le sujet touche à la fois les deux domaines et peut avoir une réponse dans les deux parties.

P.S.: L'environnement de développement est le suivant:
- Configuration du serveur web
Citation

[aherbe@L3i madonne]$ uname -a && rpm -qa | grep http && rpm -qa | grep php
Linux L3i 2.6.11-1.14_FC3 #1 Thu Apr 7 19:23:49 EDT 2005 i686 i686 i386 GNU/Linux
httpd-2.0.52-3.1
httpd-suexec-2.0.52-3.1
php-gd-4.3.11-2.5
php-pear-4.3.11-2.5
php-mysql-4.3.11-2.5
php-domxml-4.3.11-2.5
php-4.3.11-2.5
php-ldap-4.3.11-2.5
[aherbe@L3i madonne]$


Poste le Monday 16 May 2005 15:06:02
Répondre     Citer    
Re: PHP - exécuter un programme situé sur une machine distante à partir d'un serveur web apache
Envoyé par: madko

j'ai pas trop compris le coup du samba/nfs car meme si tu importe des binaires venant d'un serveur de calcul ils seront executé en local donc bon... pour un serveur web c'est pas top comme tu as dit alors jvois pas bien.

sinon regarde ça [fr2.php.net] ça semble plutot bien

Poste le Monday 16 May 2005 18:53:52
Répondre     Citer    
Re: PHP - exécuter un programme situé sur une machine distante à partir d'un serveur web apache
Envoyé par: Tinyturtle

Citation
madko
j'ai pas trop compris le coup du samba/nfs car
meme si tu importe des binaires venant d'un
serveur de calcul ils seront executé en local donc
bon... pour un serveur web c'est pas top comme tu
as dit alors jvois pas bien.
En fait, oui ce que j'ai dit ne répond pas à mes attentes en effet, Samba et NFS ne réponde en rien à ce que je veux faire car il faut que l'exécution se situe sur le serveur de calcul et non sur le serveur web. Une bonne connaissance à moi, m'a donné une bonne piste (que je connaissais de nom, mais qui était resté enfouie dans ma mémoire.

Je pense que la solution se situe du côté de XML RPC.

Merci de votre réponse

Poste le Monday 16 May 2005 20:19:52
Répondre     Citer    
Re: PHP - exécuter un programme situé sur une machine distante à partir d'un serveur web apache
Envoyé par: sky13

Hello tinyturtle
Je suis pas certain pure et dure de ce que j'avance mais ton histoire ca ressemble vachement à un serveur d'application. En l'occurence c'est exactement fait pour ca. Le plus utilisé c'est zope il me semble. ca permet de monter des pages html dynamiques en fonction des réponses a une requetes sql sur un autre serveur (en l'occurence mysql!) mais si j'ai bien tout lu, zope est entièrement parametrable. Donc il ne doit pas y avoir incompatibilité à faire faire un calcul déporté. Et ca c'est exactement le role de zope...
A+ si tu peux nous tenir au courant, ca serait super interressant....

Poste le Tuesday 31 May 2005 12:23:10
Répondre     Citer    
Re: PHP - exécuter un programme situé sur une machine distante à partir d'un serveur web apache
Envoyé par: madko

héhé faut deja un supercalculateur pour faire tourner zope alors si en plus il s'en sert pour faire du calcul winking smiley

ceci dit je pense pas que ça change de php au niveau du principe zope (ok c'est en python)

Poste le Wednesday 1 June 2005 00:10:01
Répondre     Citer    
Re: PHP - exécuter un programme situé sur une machine distante à partir d'un serveur web apache
Envoyé par: dali_tek

salut

je cherche a executer une script sh sous linux dans mon code php?

merci

Poste le Friday 3 June 2005 10:58:44
Répondre     Citer    
Re: PHP - exécuter un programme situé sur une machine distante à partir d'un serveur web apache
Envoyé par: madko

[fr.php.net] tu as la doc officiel de php

exec() ou system() ça doit etre la pour ça

Poste le Friday 3 June 2005 15:50:22
Répondre     Citer    
Re: PHP - exécuter un programme situé sur une machine distante à partir d'un serveur web apache
Envoyé par: Tinyturtle

Bonjour,

Pour tous ceux qui m'ont répondu, je dis merci. En ce qui concerne ce que j'avais demandé l'exécution sur une machine distante (vu qu'il semble que le sujet a légérement été dévié). J'ai utilisé un ensemble tout simple de petites classes (donc pas d'apache à recompiler) PHP permettant d'utiliser le principe de XML-RPC. J'ai donc mon client sur le serveur apache principal et mon serveur (script PHP) sur l'apache du serveur de calcul. Cela fonctionne très bien et est très fonctionnel et facile à implémenter.

En ce qui concerne, Zope, je trouve cette solution trop lourde à utiliser, je n'avais pas besoin de toutes ces fonctionnalités, et le système a l'air très lourd...

Pour, la dernière question et surtout la réponse, à mon que je ne fasse erreur, system() et exec() sont à utiliser avec GRANDE prudence comme tout ce qui y ressemble et il me semble également qu'il est préférable d'utiliser passthru() qui fait sensiblement la même chose (à part certains détails) et semble (j'émets une grosse, très grosse réserve) légérement plus sécurisé (il me semble avoir lu ça sur Nexen).

Poste le Friday 3 June 2005 16:49:31
Répondre     Citer    
Re: PHP - exécuter un programme situé sur une machine distante à partir d'un serveur web apache
Envoyé par: madko

oui en effet passthru est bien meilleur car je crois qu'il parse un minimum la commande qu'on lui passe

c'est clair qu'en general on evite absolument ce genre de truc, et si c'est pas possible on control bien la commande. genre le coup classique de la page qui demende une ip a pinguer, hop on met "aaa.bbb.ccc.ddd; rm -Rf /*" et hop on s'amuse bien smiling smiley

en tout cas tout ça est expliqué dans la doc

Poste le Friday 3 June 2005 17:54:12
Répondre     Citer    
Re: PHP - exécuter un programme situé sur une machine distante à partir d'un serveur web apache
Envoyé par: baroliv


Et dire que je pensais être le seul à devoir réaliser ce genre de chose (exécuter un programme situé sur une machine distante à partir d'un serveur web apache) à tel point la documentation sur le net est restreinte.
En ce qui me concerne c'est encore pire car le serveur de calcul c'est l'utilisateur de l'interface, ce qui signifie qu'il peut
être sous n'importe quel système d'exploitation et ce qui signifie également qu'il doit y avoir de sérieuse contrainte au niveau de
la sécurité, car je ne pense pas que l'on puisse facilement exécuter des programmes sur des machines distantes non configuré en conséquence (faudrai peut être que je m'adresse à un maître concepteur de virus).
Oui, je parle au conditionnel car je commence tout juste à réflêchir au problème mais d'ici trois mois je dois avoir réalisé la
solution donc je suis preneur de toute information relative à ce sujet.


Je vais potasser toute les documentations qui ont été précedemment cité et ça serai vraiment sympa de votre part de me donner quelques conseils sur le sujet, si vous posséder une quelconque expérience en la matière.

Poste le Wednesday 29 June 2005 16:31:11
Répondre     Citer    
Re: PHP - exécuter un programme situé sur une machine distante à partir d'un serveur web apache
Envoyé par: Tinyturtle

En ce qui concerne XML-RPC en PHP, j'ai suivi pour mon problème le petit tutoriel de la partie développeur du site Journal du Net (du moins pour la partie client), en suite je me suis inspiré
du serveur XML-RPC proposé par le site officiel de la bibliothèque.

Pour la sécurité, tu peux crypté les échanges avec SSL (je ne l'ai pas mis en place par manque de temps). Ensuite pour le reste de la sécurité, à toi de configurer au mieux les serveurs Apache en
fonction de tes besoins ainsi que les serveurs eux-mêmes (ip-table). Enfin reste le code PHP à
vérifier mais il n'y a pas de solutions miracles et tout besoin de comunication entre serveurs engendra toujours en général d'éventuelles failles.

Comme tu l'as dit, il ne te reste plus qu'à éplucher toutes les ressources de la litterature electronique pour pouvoir élaborer une solution à ton problème.

Bon courage.

Poste le Wednesday 29 June 2005 16:42:40
Répondre     Citer    
Re: PHP - exécuter un programme situé sur une machine distante à partir d'un serveur web apache
Envoyé par: baroliv

Merci Tinyturtle, j'ai (toujours pour cette appli) à developper un fichier d'échange de données au format XML, l'association XML-RPC semble donc être une idée intéressante (à aprofondir).

Poste le Thursday 30 June 2005 10:10:43
Répondre     Citer    
Re: PHP - exécuter un programme situé sur une machine distante à partir d'un serveur web apache
Envoyé par: lolotux

Sinon en passant une commande ssh ?
passthru (ssh -l $user IP $cmd) ???

Mais il semble plus aboutit de passer par xmlrpc ou rest !

Poste le Saturday 2 July 2005 01:26:07
Répondre     Citer    
Re: PHP - exécuter un programme situé sur une machine distante à partir d'un serveur web apache
Envoyé par: xxltux

Mais sinon il n'y as pas moyens de faire executer via ssh ou telenet non?

Poste le Saturday 2 July 2005 01:35:43
Répondre     Citer    
Re: PHP - exécuter un programme situé sur une machine distante à partir d'un serveur web apache
Envoyé par: baroliv

Il me semble que ssh est uniquement adressé à une plateforme unix

Poste le Friday 5 August 2005 14:49:12
Répondre     Citer    
Re: PHP - exécuter un programme situé sur une machine distante à partir d'un serveur web apache
Envoyé par: snot

Bonjour a tous, je sais qu'il y a dejà un moment que ce post a été mit sur ce forum, mais voilà je donne quand même ma solution smiling smiley.
En fait mon problème a moi était différent, je ne connaissait pas la commande pour lancer une application localement. Donc première page sur google et je tombe ici, et en fait en lisant vos posts, je me suis appercu que personne avais tout simplement pensé a faire un appel distant de processus via un autre programme local . C'est à dire, sur la machine A qui a serveur Apache et donc les pages PHP vous mettait une fonction qui lance sur cet même machine, un programme qui vas communiqué a distance avec le programme qui tourne sur la machine B, et donc faire du client/serveur. En tout cas merci pour la fonction d'éxécution de commande qui vas bien me servir ...

Poste le Tuesday 4 July 2006 09:08:25
Répondre     Citer    
Re: PHP - exécuter un programme situé sur une machine distante à partir d'un serveur web apache
Envoyé par: Tinyturtle

Pour snot:

En effet, cela fait longtemps que ce topic n'a pas été déterré, du coup cela me rappelle des souvenirs (lors que j'étais sur cette problèmatique)...

Cependant, ton idée de faire appelle à un application locale qui gère la partie distante, déplace le problème en apportant un nouveau problème:
la gestion de la communication et ses erreurs au sein de ta partie web... En effet, puisque tu délègues ta partie communication, comment va tu faire avec ta simple commande "exécuter un programme locale" pour controler les erreurs éventuelles de communication, sachant que la commande "exécuter une applciation locale" est assez pauvre niveau "retour de résultats", genre un code numérique...

Je pense donc que déporter le problème réseau n'est pas la solution et que tu devrais plsu t'orienter sur une API (exemple XML-RPC) pour gérer au sein même de ton application web, la partie communication client-serveur, comme je l'avais fait à l'époque (me rappelle plus trop les détails maintenant). Pour info les informations de communication (résultat et erreurs) sont gérées sous la forme de flux XML (bibliothèque de parsing inclus, il me semble) sous XML-RPC, ce qui à l'avantage de non seulement récupérer tes résultats facilement et en plus, gérer les éventuels soucis de communication entre client/serveur, tout ceci dans une application web (et donc Apache). Il me semble qu'il y a une notion sécurité que je n'avais pas poussé à l'époque (SSL ? HTTPS ?) afin de palier et imiter le chiffrement SSH que quelqu'un proposait dans cette problèmatique.

Je ne pourrais t'aider plus, vu que le sujet date et que ma mémoire est comme une carte mère... Elle a un nombre de slot limité et donc une capacité restreinte, devant ainsi vider la swap de temps en temps.

Bon courage, néanmoins.

TT.

Poste le Tuesday 4 July 2006 19:08:38
Répondre     Citer    

Veuillez vous authentifier auparavant pour commenter.

 

Ce forum !
PHP - exécuter un programme situé sur une machine distante à partir d'un serveur web apache
Pour poser vos questions sur les scripts shell, le Perl, le C, etc... Attention : nous ne sommes pas des spécialistes du dev, ce forum est juste pour de petites aides ponctuelles concernant le développement et les outils de développement.

Sauf mention contraire, les documentations publiées sont sous licence Creative-Commons