Lancer un programme par un script en PHP [Résolu/Fermé]

Signaler
Messages postés
415
Date d'inscription
samedi 13 mars 2010
Statut
Membre
Dernière intervention
22 novembre 2014
-
Messages postés
415
Date d'inscription
samedi 13 mars 2010
Statut
Membre
Dernière intervention
22 novembre 2014
-
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

Messages postés
3604
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
3 juillet 2020
957
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

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 63646 internautes nous ont dit merci ce mois-ci

Messages postés
415
Date d'inscription
samedi 13 mars 2010
Statut
Membre
Dernière intervention
22 novembre 2014
25
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...
Messages postés
3604
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
3 juillet 2020
957
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
Messages postés
415
Date d'inscription
samedi 13 mars 2010
Statut
Membre
Dernière intervention
22 novembre 2014
25
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 ?
Messages postés
3604
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
3 juillet 2020
957
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.
Messages postés
415
Date d'inscription
samedi 13 mars 2010
Statut
Membre
Dernière intervention
22 novembre 2014
25
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