Execution d'un programme externe et erreur 126

Petit nouveau ! | 2 Messages

30 oct. 2015, 12:38

Bonjour à tous,
j'essaye de lancer un exécutable issue d'un code source écrit en C (un bête hello word pour ce test) depuis une page php.
Voila le code php :

Code : Tout sélectionner

<?php $cmd2="/home/guillaume/public_html/a/a.out"; <br>$cmd22="./a.out"; $cmd3="ls"; $return_var=0; $retour=system($cmd2, $return_var); ?> <head> </head> <body> <h1> <?php echo("commande : " . $cmd2 . "<br/>"); echo("retour prgm : ". $retour . "<br/>"); echo("valeur retour : " . $return_var ); ?> </h1> </body>
Lorsque je lance mon programme, la variable retour reste vide, et return_val prend la valeur 126.
Pourtant, si je tente de lancer la $cmd3 ("ls") à la place de $cmd2, "ls" est bien éxecuté.
J'ai pensé à une question de chemin relatif ou absolu, donc j'ai testé les deux, sans succès.
J'ai pensé à un problème de droits, donc j'ai fait un :

Code : Tout sélectionner

chmod 777 a.out
puis par aquis de conscience, j'ai lancé un :

Code : Tout sélectionner

sudo -u apache /home/guillaume/public_html/a/a.out
et j'ai bien eu le retour

Code : Tout sélectionner

hello word
Mais ma page php a toujours son code retour 126...
Donc le problème ne vient à priori pas des droits sur le fichier.
Je me suis demandé si il n'y avait pas un problème de configuration apache, mais je ne sait pas trop ou chercher.
Est ce que quelqu'un aurait une idée de l'endroit d'ou le problème pourrait venir?
Est ce qu'il y aurait une autre solution pour faire cet appel qui ne rencontrerait pas ce problème?
Je remercie par avance toute personne qui pourrait me donner une idée pour résoudre mon problème :-)

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

30 oct. 2015, 12:48

Bonjour,

Le code d'erreur 126 = "Command was found but could not be executed / Permission problem or command is not an executable"
Essaye peut être de regarder dans les logs système de ton serveur pour en savoir +
Quand tout le reste a échoué, lisez le mode d'emploi...

Petit nouveau ! | 2 Messages

30 oct. 2015, 13:04

J'ai ouvert le fichier error_log, et j'ai obtenu ces informations :

Code : Tout sélectionner

sh: /home/guillaume/public_html/a/a.out: Permission denied
En remontant dans le fichier de logs, j'ai vu que dans mes tests avec un chemin relatif, le problème était exactement le même.

Code : Tout sélectionner

sh: ./a.out: Permission denied
Pour moi permission denied est une erreur qui viens du système quand les droits ne sont pas les bons, mais a.out est bien en 777 et

Code : Tout sélectionner

sudo -u apache /home/guillaume/public_html/a/a.out
fonctionne bien (je viens de retester).
Qu'est ce qui pourrait interdire à Apache d'executer le programme à part cette question de droits d'execution sur le fichier?

Edit :
Je viens de vérifier dans httpd.conf, j'ai bien les lignes :

Code : Tout sélectionner

User apache Group apache

Petit nouveau ! | 4 Messages

15 nov. 2015, 05:19

une connection FTP pour exécuter une commande sur l'hôte distant ?
si vous voulez exécutez une commande via telnet, il faudrait commencer par ouvrir une session telnet avec l'hôte distant et non une connection ftp…