Test résultat de commande DOS

Test résultat de commande DOS - PHP - Programmation

Marsh Posté le 12-09-2013 à 16:17:55    

Bonjour,
 
j'aimerai dans mon script en PHP continuer le déroulement uniquement si l'importation des fichiers de back UP dans la BDD s'est bien déroulée :

Code :
  1. $db = new PDO('mysql:host=localhost;dbname='.$bdd_centralisee.'', $utilisateur, $password);
  2. $db->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
  3. // Ouvre un dossier, et liste tous les fichiers
  4. if (is_dir($repertoire_sauvegarde)) {
  5.     if ($dh = opendir($repertoire_sauvegarde)) {
  6.         while (($file = readdir($dh)) !== false) {
  7.             echo "$file";
  8.    $commande = "".$repertoire_mysql." -h localhost -u ".$utilisateur." -p".$password." ".$bdd_source." < ".$repertoire_sauvegarde."".$file."";
  9.    $CR_exec = shell_exec($commande);
  10. try {
  11.     // Transaction  
  12.     $db->beginTransaction();
  13.     // Mes requêtes ....)


 
J'aimerai donc qu'on entre dans le bloc TRY uniquement si la commande permettant d'importer un fichier de sauvegarde de BDD ne renvois pas d'erreurs (je sais le faire en batch, mais je dois le faire en PHP ...).
 
Merci.


Message édité par lp77 le 12-09-2013 à 16:18:32
Reply

Marsh Posté le 12-09-2013 à 16:17:55   

Reply

Marsh Posté le 12-09-2013 à 18:02:25    

http://php.net/manual/fr/function.shell-exec.php

 
Citation :

Valeurs de retour

 

La sortie de l'exécution de la commande ou NULL si une erreur survient.

Message cité 1 fois
Message édité par skeye le 12-09-2013 à 18:02:37

---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 12-09-2013 à 20:24:32    

Mais comment tester si l'importation de la BDD en DOS a bien été faite ou non, quelle message est renvoyé au PHP ?
Merci.

Reply

Marsh Posté le 12-09-2013 à 20:47:19    

si ta commande renvoie quelque chose, tu l'as en retour de shell_exec. A toi de traiter ce retour.


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 13-09-2013 à 11:26:19    

Lorsque j'affiche la variable CR_exec il n'y a rien :

Code :
  1. $commande = "".$repertoire_mysql." -h localhost -u ".$utilisateur." -p".$password." ".$bdd_source." < ".$repertoire_sauvegarde."".$file."";
  2.    $CR_exec = shell_exec($commande);


Alors qu'en tapant la commande en DOS on a 1 ou 0 selon le fait qu'il y ait une erreur ou non.
Avez vous une idée pour savoir comment je pourrai contrôler le fait que l'importation d'une BDD se déroule avec succés ou non ?
Merci.

Reply

Marsh Posté le 13-09-2013 à 11:28:11    

lp77 a écrit :

Lorsque j'affiche la variable CR_exec il n'y a rien


 

skeye a écrit :

NULL si une erreur survient.



---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 13-09-2013 à 12:05:13    

J'ai ressayé sans mettre d'erreurs, ça affiche toujours rien.

Reply

Marsh Posté le 13-09-2013 à 12:07:40    

tu l'affiches comment?


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 13-09-2013 à 12:13:29    

echo " $CR_exec";

Reply

Marsh Posté le 13-09-2013 à 13:12:03    

var_dump($CR_exec) dit quoi?


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 13-09-2013 à 13:12:03   

Reply

Marsh Posté le 13-09-2013 à 13:38:07    

Il affiche NULL dans tous les cas (erreurs ou OK).

Reply

Marsh Posté le 13-09-2013 à 13:47:56    

ok, donc ce que t'affiche DOS n'est pas une sortie de ta commande mais plutôt le code de retour.
Tu devrais probablement utiliser plutôt exec() ou system() et récupérer ça dans le 3eme paramètre optionnel : http://www.php.net/manual/fr/function.exec.php / http://www.php.net/manual/fr/function.system.php


Message édité par skeye le 13-09-2013 à 13:49:24

---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 13-09-2013 à 14:28:35    

Ok merci, ça fonctionne, il renvoie 0 ou 1.
Maintenant je voudrai faire une condition si c'est vrai je continue sinon j'arrête, j'ai pensé au if else mais ça ne fonctionne pas apparemment.

Code :
  1. $commande = "".$repertoire_mysql." -h localhost -u ".$utilisateur." -p".$password." ".$bdd_source." < ".$repertoire_sauvegarde."".$file."";
  2.     $commande = system($commande, $retval);
  3.     var_dump($retval);

Reply

Marsh Posté le 13-09-2013 à 14:32:36    

Non j'ai parlé trop vite, ça fonctionne.
Merci.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed