Exécution d'un script .sh sous php

Bien le bonjours / bonsoirs à tous

Voila cela fait maintenant un bon moment que j’utilise debian… qui est d’ailleurs super bien.

Mais voila un problème vient ce poser …
Le soucis dans le titre :
J’aimerai exécuter un script shell (.sh) sur un site web “PHP”

J’ai donc effectuer beaucoup beaucoup de recherche sans grand succès…
J’ai tous de même trouver :
debian-fr.org/execution-scri … 29222.html

Mais voila aucune réponse officiel et pas toute à fait les bonne réponse…

C’est pas que j’essaye pas , c’est que j’ai beaucoup essayer mais rien ne marche…
En surfant un peu sur la toile du web j’ai trouver plusieurs trucs :

[code]<?php
if(isset($_POST))
{
if(isset($_GET[‘action’]) && $_GET[‘action’] == ‘yes’)
{
exec(’/home/css/copy.sh’, $output);
print_r($output);
}
}

echo ’

'; ?>[/code]

En essayant de l’adaptant pour moi , cela ne fonctionne toujours pas

Je suis venu pour de l’aide merci d’avance pour vos futur réponse.

Salut,
La section “Programmation” convient mieux à ta question, j’ai déplacé ton message.

Concernant ta question elle-même…

Il y a des messages d’erreur, quelque chose à nous mettre sous la dent ? Avec aussi peu d’indices ça va être difficile de t’aider, d’autant que le code semble bon.

Non actuellement aucune erreur à faire parvenir , étant donner que ce que je vous ai passez et belle est bien le code complet de la page web.

Sa fait un “Bouton” Suffit de cliquer dessus , mais rien ne ce passe. désoler.

J’aimerai vous en dire plus afin de vous faire comprendre mon problème mais j’ai expliquer au mieux :

Exécution d’un script shell avec php …

Je ne c’est comment y parvenir , merci d’avance

Essaye déjà de rajouter les deux lignes suivantes au début de ton script PHP, avec un peu de chance ça permettra d’afficher des erreurs ou des avertissements concernant ce qui cloche :

ini_set('error_reporting', E_ALL); ini_set('display_errors', 1);
C’est très probablement une question de droits et/ou de configuration Apache/PHP, mais on navigue un peu à l’aveuglette là.

Voila , j’ai fait ce que tu ma demander , mais rien n’y fait aucune erreur ne s’affiche …
Ou c’est que je doit me déplacer quelque part ? dans un répertoire pour aller chercher les erreur ?

Voici le code au complet actuel pour le test :

[code]<?php
ini_set(‘error_reporting’, E_ALL);
ini_set(‘display_errors’, 1);

if(isset($_POST[‘exec’]))
{
if(isset($_GET[‘action’]) && $_GET[‘action’] == ‘yes’)
{
$cmd = exec(escapeshellcmd(’/var/www/panel2/test.sh’));

if($cmd)
{
   echo 'Lancement Ok ';
}
else
{
   echo 'Le lancement du shell n\'a pas fonctionner';
}

}
}

echo ’

'; ?>[/code]

Bien entendu la réponse après l’exécution n’est autre que “Le lancement du shell n’a pas fonctionner”

Merci d’avance

EDIT :

Bon une bonne nouvelle comme une mauvaise…

Finalement , je ne c’est pas pourquoi , après avoir fait Executer la réponse est : Lancement Ok
"BIEN"
mais (toujours un mais)
Rien ne se passe … alors que sous SSH je fait ./test.sh sa fonctionne…
Juste pour information le code sh c’est :

#!/bin/sh echo "---------------------------------------------------------------------" echo Reboot en cours echo "---------------------------------------------------------------------" reboot

Le reboot fonctionne si je le fait directement sous SSH autrement sa marche pas , et je ne c’est pas pourquoi

merci d’avance

[quote=“R@pid0”]Voila , j’ai fait ce que tu ma demander , mais rien n’y fait aucune erreur ne s’affiche …
Ou c’est que je doit me déplacer quelque part ? dans un répertoire pour aller chercher les erreur ?[/quote]
Les erreurs éventuelles se seraient affichées directement dans ton navigateur.

[quote=“R@pid0”]Rien ne se passe … alors que sous SSH je fait ./test.sh sa fonctionne…
[…]
Le reboot fonctionne si je le fait directement sous SSH autrement sa marche pas , et je ne c’est pas pourquoi[/quote]
Là du coup c’est une bête question de droits :

  • Apache et PHP s’exécutent avec les droits de l’utilisateur www-data (de mémoire), et donc ton script test.sh également.
  • Or, il faut les droits root pour rebooter la machine.

Partant de là, il faut trouver un moyen pour autoriser l’utilisateur www-data à exécuter la commande reboot avec les droits root.
Sur Linux, ça peut se faire facilement en utilisant sudo ou super (au choix) après l’avoir correctement configuré. sudo est plus souple, super est plus facile à configurer… À toi de voir, je te laisse te documenter.

Edit : s/apache/www-data/ :blush:

Faut dire que les résultat commence à être concluant … que dire d’autre …

Hum un bon merci pour tes réponse rapide ( très rapide … ) et à bientôt dans ce cas :slightly_smiling:

Merci à toi cher ami ^^