Lancer un programme par un script en PHP

Résolu
Bonjour,
je suis en train de réaliser un lanceur (pour un serveur de jeu) qui necessite plusieurs batch de démarré pour fonctionner. donc j'avais penser les lancés à la suites par l'intermediaire d'un script en php avec la fonction exec mais je ne parvient pas quand le batch est lancer à faire apparaitre un ok au lieu d'un erreur par defaut (j'ai déjà effectuer des recherches essayer plusieurs chose mais sans succès

<?php    

$com = "start D:\serv.bat";    
exec($com, $serv);    

function demarre($s = 'd,marr,')    
{    
 return "" . $s . "";    
}    

function arrete($s = 'Erreur')    
{    
 return "       " . $s . "";    
}    

echo ' Serveur 1           ->  ' . ($serv_ok ? demarre() : arrete()) . PHP_EOL;    
echo ' Contrôleur 3        ->  ' . ($cont_ok ? demarre() : arrete()) . PHP_EOL;    
echo ' Contrôleur 4        ->  ' . ($contx_ok ? demarre() : arrete()) . PHP_EOL;    


?>


je précise que je me suis bassé sur un script déjà existant et comme je n'y connait pas grand chose en php j'essaye de réaliser des petites choses comme ceci. (j'avais déjà créé un petit script en batch temporisé mais la j'aimerais avoir un script qui lance et qui vérifi si le batch en question et bien démarrer

4 réponses

  1. Bonjour,

    Dans tes « echo », tu utilises des variables qui ne sont pas définies : $serv_ok, $cont_ok et $contx_ok.

    J'imagine qu'elles sont censées être les variables de sortie de exec($com, $serv).

    Par ailleurs, d'après la documentation PHP https://www.php.net/manual/fr/function.exec.php , les choses ne sont pas aussi simples.

    Il faut bien analyser le retour normal de tes batchs pour savoir comment vérifier s'ils ont bien tourné.

    Pour tester, je te suggères d'abord ce code-là :
    <?php    
    
    $com = "start D:\serv.bat";
    $tableau = array();
    $retour = "";
    $derniereLigne = exec($com, $tableau, $retour);    
    
    var_dump($derniereLigne);
    echo "\r\n<br />\r\n";
    var_dump($retour);
    echo "\r\n<br />\r\n";
    var_dump($tableau);
    
    ?>


    Exécute ça, et donne le résultat affiché.

    Ça me permettra de te dire quoi mettre dans ton code.

    Xavier
    1. merci de m'aider mais disont que j'ai des batchs converti en exe qui m'execute d'autre batch (sa me permet de les démarrer en min et comme ils utilisent du javascript et du php si je ne créé pas un mini lanceur en exe dans le même dossier que l bat que je veux lancer ils refusent de démarrer à cause d'un mauvais répertoire de lancement donc ducoup j'avais trouver une alternative
                        _>rep.serv startlanceur.exe->start.exe              
      rep.racine .bat [ _>rep.controleur1 Onyxlanceur.exe->Onyx.bat              
                        _>rep.controleur2 Xasecolanceurdirt->Xaseco.bat 


      (par exemple dans mon bat avant conversion en exe pour serv j'ai)
      cd..  
      cd serveursTHPdirtrpg\Onyx3\ServDirt  
      start/MIN start.exe  
      exit


      et donc pour ton script quand je l'execute pour lancer cet exe sa me donne
      string(0) ""  
      
      <br />  
      int(0)  
      
      <br />  
      array(0) {  
      }  
      0  
      Appuyez sur une touche pour continuer...
      1. OK, alors je te suggères le code suivant :

        <?php    
        
        $comServ = "start D:\serv.bat";
        $comCont = "start ...";
        $comContx = "start ...";
        
        $dummy = array();
        $serv_ok = "";
        $cont_ok = "";
        $contx_ok = "";
        
        exec($comServ, $dummy, $serv_ok);   
        exec($comCont, $dummy, $cont_ok);   
        exec($comContx, $dummy, $contx_ok);   
        
        function demarre($s = 'd,marr,')    
        {    
         return "" . $s . "";    
        }    
        
        function arrete($s = 'Erreur')    
        {    
         return "       " . $s . "";    
        }    
        
        echo ' Serveur 1           ->  ' . (($serv_ok == 0) ? demarre() : arrete()) . PHP_EOL;    
        echo ' Contrôleur 3        ->  ' . (($cont_ok == 0) ? demarre() : arrete()) . PHP_EOL;    
        echo ' Contrôleur 4        ->  ' . (($contx_ok == 0) ? demarre() : arrete()) . PHP_EOL;    
        
        
        ?>
        
        


        Xavier
        1. merci Xavier sa fonctionne très bien mais n'y à t'il pas moyen de démarrer directement l'onyx.bat ou encore le xaseco.bat car en regardant bien les "lanceurs" eux ne vont jamais planter donc n'y à t'il pas une autre alternative ?
          1. Mmmh...
            Là comme ça, je ne sais pas.
            Par contre, une piste : en remplaçant « exit » par « exit n » avec n égal au code retour que tu veux renvoyer.
            La question qui reste, c'est comment déterminer ce « n » en batch. Je ne maîtrise pas trop... mais je pense que c'est une piste à investiguer.
          2. sinon et t'il possible de lancer les lanceurs à un autre moment et récuperer seulement l'info avec exe comma sa imaginont execution des 3 lanceurs lancement des servs cont1 contx et pour chaques récupération d'information comme quoi ils sont en fonctionnement (ou une autre manière)
            merci