Utiliser exec() en php

Utiliser exec() en php - PHP - Programmation

Marsh Posté le 25-01-2006 à 22:47:17    

Bonjour,
 
Je tente de faire un petit script en php qui me permettrait sur mon serveur d'exécuter un programme C qui se trouve sur le serveur et d'en récupérer le résultat.
 
J'ai regardé dans la documentation de PHP, et j'ai trouvé les fonctions de la famille exec().
 
La fonction shell_exec() me paraissant faire bien l'affaire. J'ai voulu faire un petit test très bête avec un hello world en C :
 

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int main(void)
  4. {
  5. printf("Hello World" );
  6. return 0;
  7. }


 
J'ai compilé ce programme sous le nom hello.
 
Voici mon petit script php :
 

Code :
  1. <?php
  2. $output = shell_exec('./hello');
  3. echo"sortie : $output";
  4. ?>


 
 
Bon en sortie, je n'ai rien le programme que j'ai créer ne s'exécutant pas apparemment. J'ai donc regardé du côté de la configuration de php sur le serveur et j'ai vu ça :
 
safe_mode Off Off
safe_mode_exec_dir no value no value
safe_mode_gid Off Off
safe_mode_include_dir no value no value
 
Apparemment, le safe_mode n'est pas activé je devrais donc pouvoir utiliser les fonctions de la famille exec.
J'ai donc testé shell_exec() sur des commandes du shell telle qu'un simple ls ou un echo et là ça marche, l'exécution se produit bien et j'ai bien l'affichage du résultat sur ma page php.
 
Donc, je me demande d'où mon problème pourrait venir par rapport à l'exécution d'un des mes propres exécutables.
Peut être un problème de droit (mais j'ai donné tous les droits sur l'exécutable).
 
Quelqu'un aurait une idée ?
 
Merci d'avance de votre aide.
 
Sylvain.

Reply

Marsh Posté le 25-01-2006 à 22:47:17   

Reply

Marsh Posté le 26-01-2006 à 00:40:41    

Peut etre mettre :  
 $output = shell_exec('./hello.c');  
 
Rien de certain, je onnais pas cette fonction !

Reply

Marsh Posté le 26-01-2006 à 13:21:25    

hello.c n'est pas un exécutable ça n'a pas de sens une telle ligne de commande dans un shell.
 
Personne ?

Reply

Marsh Posté le 26-01-2006 à 14:31:20    

Vérifie le répertoire d'exécution afin de t'assurer que le chemin d'accés vers l'exécutable est le bon.
Les versions récentes de php en ligne de commande ne changent plus le répertoire d'exécution pour celui du script.

Reply

Marsh Posté le 26-01-2006 à 16:45:19    

Je le vérifie comment le répertoire d'exécution ?
Y a une fonction en php peut être ?

Reply

Marsh Posté le 26-01-2006 à 16:52:14    

Recherche du mot "dossier" dans la documentation disponible sur le site newen.
Résultat (j'ai mis que les premiers résultats) :

Citation :

  scandir Liste les fichiers et dossiers dans un dossier  
   readdir Lit une entrée du dossier  
   dirname Renvoie le nom du dossier  
   getcwd Retourne le dossier de travail courant  
   rmdir Efface un dossier  
   mkdir Crée un dossier


Donc oui, il y en a une.

Reply

Marsh Posté le 26-01-2006 à 18:25:08    

J'ai donc testé avec getcwd et le répertoire d'exécution correspond bien au répertoire où j'ai mis mon exécutable hello.

Reply

Marsh Posté le 26-01-2006 à 20:21:35    

Tu es bien sur un serveur personnel sur ta propre machine ou bien sur un serveur dedié ?
 
Pourquoi ne pas utiliser les autres arguments de exec ? et passthru ?


Message édité par afbilou le 26-01-2006 à 20:24:45
Reply

Marsh Posté le 27-01-2006 à 00:43:06    

J'ai testé sur mon serveur personnel et tout marche en fait.
Et là où ça ne veut pas sur mon espace mutualisé chez OVH.
 
J'ai essayé le code avec exec et system, le résultat est le même : rien ne  se passe.  
En essayant avec passthru, le résultat renvoyé comme valeur est 1 mais l'affichage ne se fait pas non plus.
 

Reply

Marsh Posté le 27-01-2006 à 03:23:07    

Si le safe_mode est à off, c'est sans doute que PHP est exécuté par un utilisateur aux droits réduits.

Reply

Marsh Posté le 27-01-2006 à 03:23:07   

Reply

Marsh Posté le 27-01-2006 à 09:09:42    

Sur un hébergement mutualisé tu as aucune chance d'avoir la possibilité d'executer un programme.
Seul un serveur dédié te permettras.

Reply

Marsh Posté le 27-01-2006 à 10:30:16    

kalex > le safe_mode étant à off, ce n'est pas php qui limite les possibilités. Peut être que l'utilisateur est limité mais si sylsau à fait un chmod 777 sur son fichier et les dossiers du site amenant à ce dossier alors il ne devrait pas y avoir de probléme de ce côté là non plus.
 
Gatsu35 > Si les fonctions telles qu' "exec" était désactivé, il ne devrait pas avoir une erreur d'affiché? En plus il dit que ca marche en exécutant des programmes tels que "ls", c'est donc que la fonction est utilisable. A ton avis, ca pourait être quel réglage qui permet d'empécher l'exécution des scripts situé dans le dossier du site web quand le "safe_mode" est désactivé et que le "safe_mode_exec_dir" est indéfini?

Reply

Marsh Posté le 27-01-2006 à 16:32:44    

omega2 a écrit :

kalex > le safe_mode étant à off, ce n'est pas php qui limite les possibilités. Peut être que l'utilisateur est limité mais si sylsau à fait un chmod 777 sur son fichier et les dossiers du site amenant à ce dossier alors il ne devrait pas y avoir de probléme de ce côté là non plus.

chmod peut être autorisé, mais pas les programmes perso.

Reply

Marsh Posté le 27-01-2006 à 16:52:40    

kalex > ben justement comment ils arrivent à bloquer au niveau de l'OS les programmes situé dans un répertoire donnée? Ca m'intéresse de le savoir ne seraisse que pour ne pas chercher comme un couillon au niveau des réglages de php pendant des heures si un jour je me retrouve dans cette situation.

Reply

Marsh Posté le 27-01-2006 à 17:01:57    

Je sais que c'est possible, car je l'ai vécu (en tant qu'user :cry: ).
Si je devais mettre ça en place, je pense que je chercherais du côté de chroot.

Reply

Marsh Posté le 27-01-2006 à 17:08:38    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed