• Serveurs
  • executer un programme shell dans un code HTML/PHP

Bonjour, j'essaie actuelement de créer une interface web qui permet de démarer un script shell (script.sh), (pour mettre en route un bot discord). mais le système ne fonctionne pas... voici le code php : (j'utilise shell_exec)

<?php
shell_exec('./script.sh');
echo "Bot lancé";
?>

et voici le code HTML :

<html>
  <head>
    <title>BOT</title>
  </head>
  <body>
    <form action="script.php" method="post">
      <input type="submit" value="Demarer script.php" />
    </form>
  </body>
</html>

la page web fonctionne (pas de problème au niveau de l'interface) et on a bien un message "bot lancé". j'ai testé le script.sh ($ ./script.sh) il fonctionne, j'ai testé aussi le script.php ($ php script.php), il fonctionne aussi. pour info, le fichier php se nomme bien "script.php", et "script.sh" est situé dans le meme dossier que l'index et le "script.php". j'utilise Apache2 sur Debian 11. Mon but serait donc que quand on appui sur le bouton, le script.php soit executé.
merci beaucoup d'avance

peut etre un problème de droits ou de proprietaire du fichier .sh ?
il faut faire tous les tests sous le nom d'utilisateur qui fait tourner ton process php
si c'est un utilisateur qui peut se connecter au shell bien sur

    ericde45 ok, merci pour votre réponse, j'utilise Apache2, j'ai vu que l'utilisateur était effectivement diférent, j'ai autorisé à l'excution avec chmod le fichier php. Commen faire pour tester le php sous cet utilisateur ?
    merci beaucoup

    salut,
    quel est l'utilisateur Apache, www-data ?

    l'utilisateur du script est-il le même ?
    sinon chown www-data:www-data script.sh

    le script est exécutable je suppose ?
    sinon chmod +x script.sh

    quel est le contenu du script ?
    entre balises ``` si ce n'est pas trop long, sinon sur un pastebin (et sans le contenu sensible)

    Note: tu peux aussi me ping sur Discord pour aller plus vite


    Une autre piste pour plus tard :
    https://stackoverflow.com/a/20524908

    $xarg = escapeshellarg("./script.sh 2>&1");
    $result = shell_exec("$xarg");

    et le contenu du script

    #!/bin/bash 
    $xarg=$1 
    script blah blah ...
    exit 0

      spider1163 voici le script.sh :
      'cd
      cd /home/eliott/Bureau/vraibot/aternos-discord-bot/
      ATERNOS_SESSION=XXXXXXXXXXX
      ATERNOS_SERVER=XXXXXXXXXXXX
      DISCORD_TOKEN=XXXXXXXXXXXX
      go run ./cmd'

      l'utilisateur apache est vien www-data
      le script est executable, et l'utilisateur du script est aussi "www-data"

      Personnellement, je préfère exec :

      <?php
      $execution = exec('./script.sh',$output,$retval);
      if ($execution === false)
      {
        echo "erreur au lancement";
      }
      else if ($retval != 0)
      {
        echo "script lancé mais code retour != 0";
      }
      else
      {
        echo "script lancé, retour du script :";
        echo $output;
      }
      ?>

      (Disclaimer : code écrit avec la méthode de Mr Rache, non testé, et ça fait presque 5 ans que j'ai pas fait de php. Donc même si "tester c'est douter", je recommande quand même de jeter un oeil attentif avant de faire quoi que ce soit)

        Merrick Merci beaucoup, votre script semble tres bien fonctionner, '$ php script.php" execute bien le bot, mais quand j'execute la page HTML, rien ne sa passe...
        j'ai changé le code HMTL
        pour qu"il soit plus simple, mais toujours pas de démarage<!DOCTYPE html>
        <html>
        <head>
        <title>Exécution de script shell</title>
        </head>
        <body>
        <h1>Exécution de script shell</h1>
        <form action="script.php" method="post">
        <input type="submit" value="Exécuter le script">
        </form>
        </body>
        </html>

        je pense que le problème vient de la connection entre apache2 et php (j'ai installé la librairie) ou alors des permissions (que j'ai bien modifié)

          update : j'ai essayé un autre moyen en passant par java.
          voici mon code : <!DOCTYPE html>
          <html>
          <head>
          <title>My Simple HTML Page</title>
          </head>
          <body>
          <h1>Welcome to my website</h1>
          <button onclick="runScript()">Click me</button>
          <script>
          function runScript() {
          var script = "script.sh";
          var exec = require('child_process').exec;
          exec(script, function(error, stdout, stderr) {
          console.log(stdout);
          });
          }
          </script>
          </body>
          </html>

          j'ai installé la child_process avec npm
          script.sh démare le bot nickel $ ./script.sh --> "le bot fonctionne"
          mais en passant par HTML, ça en fonctionne pas.

          eliott Quand tu cliques sur le bouton "exécuter le script", ton navigateur t'affiche quoi au juste ?

          Pour le post suivant, attention, tu utilise javascript, pas java, ce n'est PAS DU TOUT la même chose !

            Merrick ok désolé, par rapport au bouton, quand je clique dessus, il ne s'affiche rien

            Si ça donne une page blanche, c'est probablement une erreur 500. Il faut regarder dans les logs (/var/log/apache2 ou /var/log/nginx selon ton serveur web) pour savoir ce qui s'est passé.

            Répondre…