IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[Système] Exécuter une commande


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    206
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 206
    Points : 87
    Points
    87
    Par défaut [Système] Exécuter une commande
    Bonjour,

    j'ai une commande qui fonctionne correctement lorsque je l'éxécute en lancant executer/cmd

    Par contre lorsque je l'integre dans un exec dans mon fichier php ca ne marche pas !
    Voici ce que j'execute via cmd :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    "C:\Program Files\MySQL\MySQL Server 5.0\bin\mysql.exe" -hlocalhost -uroot -pmonpass < "D:\guides.sql"
    en php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $commande = "\"C:/Program Files/MySQL/MySQL Server 5.0/bin/mysql.exe\" -hlocalhost -uroot -pmonpass < \"D:/guides.sql\"";
    		echo $commande.'<br \>';
    		$res = exec($commande) or die('erreur');
    Dans les log d'apache voici l'erreur :
    '/' n'est pas reconnu en tant que commande interne
    ou externe, un programme ex‚cutable ou un fichier de commandes.

    Merci d'avance

  2. #2
    Membre confirmé Avatar de llaffont
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2007
    Messages
    701
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2007
    Messages : 701
    Points : 597
    Points
    597
    Par défaut
    Salut,
    Dans un premier temps
    Utilise des quote plutot que des guillemets.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $commande = '"C:\Program Files\MySQL\MySQL Server 5.0\bin\mysql.exe" -hlocalhost -uroot -pmonpass < D:\guides.sql ';
    ++
    La théorie, c'est quand on sait tout et que rien ne fonctionne.
    La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi.

    Ici, nous avons réuni théorie et pratique : Rien ne fonctionne... et personne ne sait pourquoi !


    Albert Einstein

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    206
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 206
    Points : 87
    Points
    87
    Par défaut
    J'ai rajouté après le exec, un et il me marque toujours
    erreur
    .

    Lorsque je regarde les log de apache, j'ai ce message :
    '/' n'est pas reconnu en tant que commande interne
    ou externe, un programme ex‚cutable ou un fichier de commandes.
    En modifiant comme proposé précédement, j'obtiens ce message dans les log d'apache :
    Syntaxe du nom de fichier, de r‚pertoire ou de volume incorrecte.

  4. #4
    Membre éprouvé Avatar de obito
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2008
    Messages
    773
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2008
    Messages : 773
    Points : 948
    Points
    948
    Par défaut
    BOnjour !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $commande = '\"C:/Program Files/MySQL/MySQL Server 5.0/bin/mysql.exe\" -hlocalhost -uroot -pmonpass < \"D:/guides.sql\"';
    		echo $commande.'<br \>';
    		$res = exec($commande) or die('erreur');
    EDIT : J'ai dit des bétises la Ha pas tant que ca si c'est un pb de \ faire ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $commande = '\\"C:\\Program Files\\MySQL\\MySQL Server 5.0\\bin\\mysql.exe\\" -hlocalhost -uroot -pmonpass < \\"D:\\guides.sql\\"';
    		echo $commande.'<br \>';
    		$res = exec($commande) or die('erreur');
    ►Ne pas oublier le

  5. #5
    Débutant Avatar de miron
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    479
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 479
    Points : 291
    Points
    291
    Par défaut
    Salut,

    je vais surement dire une bêtise, mais dans ta commande tu utilises des \ (antislash) et dans ton php des / (slash), ça ne viens pas de la le problème ?

    A+
    Prenez le temps d'aller vite...

    Programme sous Windows, en C avec Code::Blocks, en Java JRE 1.6. avec Eclipse, en PHP/HTML/CSS avec Dreamweaver CS5 ou NotePad++ et en VBA sous avec Access 2010, Excel 2010, Word 2010 et Outlook 2010.

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    206
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 206
    Points : 87
    Points
    87
    Par défaut
    J'ai déjà tester avec \\ et ca ne marche pas,

    Dans ton code, manière il y a une erreur...

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    206
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 206
    Points : 87
    Points
    87
    Par défaut
    Citation Envoyé par miron Voir le message
    Salut,

    je vais surement dire une bêtise, mais dans ta commande tu utilises des \ (antislash) et dans ton php des / (slash), ça ne viens pas de la le problème ?

    A+
    Déjà testé, et toujours pareil ...

  8. #8
    Membre éprouvé Avatar de obito
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2008
    Messages
    773
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2008
    Messages : 773
    Points : 948
    Points
    948
    Par défaut
    Ha ok au tant pour moi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $commande = '\"C:/Program Files/MySQL/MySQL Server 5.0/bin/mysql.exe\" -hlocalhost -uroot -pmonpass < \"D:/guides.sql\"';
    		echo $commande.'<br \>';
    		$res = exec($commande) or die('erreur');
    Le premier \ doit y être forcemment non? Si oui il faut mettre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $commande = '\\"C:/Program Files/MySQL/MySQL Server 5.0/bin/mysql.exe\\" -hlocalhost -uroot -pmonpass < \\"D:/guides.sql\\"';
    		echo $commande.'<br \>';
    		$res = exec($commande) or die('erreur');
    ►Ne pas oublier le

  9. #9
    Membre confirmé Avatar de llaffont
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2007
    Messages
    701
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2007
    Messages : 701
    Points : 597
    Points
    597
    Par défaut
    tente un truc de ce style

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    $commande = '"C:\Program Files\MySQL\MySQL Server 5.0\bin\mysql.exe" -hlocalhost -uroot -pmonpass < D:\guides.sql ';
     
     
    exec($commande , $output, $err);
     
    echo "CMD : $command<br>";
    echo 'output : '.nl2br(print_r($output,true)).'<br>';
    echo 'err : '.$err.'<br>';
    Attention ! les / et \ n'ont pas la même fonction.
    ici c'est un chemin Windows donc \
    La théorie, c'est quand on sait tout et que rien ne fonctionne.
    La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi.

    Ici, nous avons réuni théorie et pratique : Rien ne fonctionne... et personne ne sait pourquoi !


    Albert Einstein

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    206
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 206
    Points : 87
    Points
    87
    Par défaut
    En faisant comme tu dis llaffont, j'obtiens :
    CMD :
    output : Array
    (
    )

    err : 1
    et dans les logs :
    'Program' n'est pas reconnu en tant que commande interne
    ou externe, un programme ex‚cutable ou un fichier de commandes.

  11. #11
    Débutant Avatar de miron
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    479
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 479
    Points : 291
    Points
    291
    Par défaut
    Remplace les espaces par des %20
    Prenez le temps d'aller vite...

    Programme sous Windows, en C avec Code::Blocks, en Java JRE 1.6. avec Eclipse, en PHP/HTML/CSS avec Dreamweaver CS5 ou NotePad++ et en VBA sous avec Access 2010, Excel 2010, Word 2010 et Outlook 2010.

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    206
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 206
    Points : 87
    Points
    87
    Par défaut
    non plus ...

  13. #13
    Membre éprouvé Avatar de obito
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2008
    Messages
    773
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2008
    Messages : 773
    Points : 948
    Points
    948
    Par défaut
    je tente encore une fois :S en me basant sur le code d'avant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $commande = '"cd C:\Program Files\MySQL\MySQL Server 5.0\bin\mysql.exe" -hlocalhost -uroot -pmonpass < D:\guides.sql ';
     
     
    exec($commande , $output, $err);
     
    echo "CMD : $commande<br>";
    echo 'output : '.nl2br(print_r($output,true)).'<br>';
    echo 'err : '.$err.'<br>';
    EDIT : L'idée ici serait de le faire en deux temps à savoir se rediriger puis lancer le exe...
    ►Ne pas oublier le

  14. #14
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    206
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 206
    Points : 87
    Points
    87
    Par défaut
    Je pense que l'idée de miron est pas mal car du coup j'ai remplacé par ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $commande = "\"C:\\Program%20Files\\MySQL\\MySQL%20Server%205.0\\bin\\mysql.exe\" -hlocalhost -uroot -pintertek < \"D:\\guides.sql\"";
    		echo $commande.'<br \>';
    		$res = exec($commande) or die('erreur');
    Car mnt l'erreur d'apache est :
    'mysql.exe' n'est pas reconnu en tant que commande interne
    ou externe, un programme ex‚cutable ou un fichier de commandes.

  15. #15
    Débutant Avatar de miron
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    479
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 479
    Points : 291
    Points
    291
    Par défaut
    Moi je suis de l'avis d'obito, qu'utiliser des "quotes" plutôt que des guillemets ca serait pas plus mal...
    Enfin moi je préférerais des quotes aux guillemets...
    Prenez le temps d'aller vite...

    Programme sous Windows, en C avec Code::Blocks, en Java JRE 1.6. avec Eclipse, en PHP/HTML/CSS avec Dreamweaver CS5 ou NotePad++ et en VBA sous avec Access 2010, Excel 2010, Word 2010 et Outlook 2010.

  16. #16
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    206
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 206
    Points : 87
    Points
    87
    Par défaut
    L'un ou l'autre ne fonctionne pas, je fais toujours mes tests avec les deux au cas où ...

  17. #17
    Débutant Avatar de miron
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    479
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 479
    Points : 291
    Points
    291
    Par défaut
    Je crois que ça dépasse mes connaissances, Désolé.
    Bon courage
    Prenez le temps d'aller vite...

    Programme sous Windows, en C avec Code::Blocks, en Java JRE 1.6. avec Eclipse, en PHP/HTML/CSS avec Dreamweaver CS5 ou NotePad++ et en VBA sous avec Access 2010, Excel 2010, Word 2010 et Outlook 2010.

  18. #18
    Membre éprouvé Avatar de obito
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2008
    Messages
    773
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2008
    Messages : 773
    Points : 948
    Points
    948
    Par défaut
    Testé chez moi et lance bien le processus, mais qui ne lance aucune fenetre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    $commande = "start C:\\Program Files\\Movie Maker\\moviemk.exe";
     
     
    exec($commande , $output, $err);
     
    echo "CMD : $commande<br>";
    echo 'output : '.nl2br(print_r($output,true)).'<br>';
    echo 'err : '.$err.'<br>';
    Sinon voila l'avertissement sur php.net :

    Note: Si vous démarrez un programme en utilisant cette fonction et que vous voulez le laisser tourner en arrière plan, vous devez vous assurer que la sortie du programme est redirigée vers un fichier, ou un autre flux de sortie, sinon PHP attendra jusqu'à la fin de l'exécution du programme.
    EDIT : Mais c'est le problème énoncé sur php.net qui se passe chez moi le script tourne sans fin...
    ►Ne pas oublier le

  19. #19
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    206
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 206
    Points : 87
    Points
    87
    Par défaut
    Quand tu lance ce script php, que se passe t'il chez toi ?

    Moi j'obtiens :
    CMD : start C:\Program Files\Movie Maker\moviemk.exe
    output : Array
    (
    )

    err : 1
    et dans apache :
    '/start' n'est pas reconnu en tant que commande interne
    ou externe, un programme ex‚cutable ou un fichier de commandes.

  20. #20
    Membre éprouvé Avatar de obito
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2008
    Messages
    773
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2008
    Messages : 773
    Points : 948
    Points
    948
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $commande = "start moviemk.exe";
     
     
    exec($commande , $output, $err);
     
    echo "CMD : $commande<br>";
    echo 'output : '.nl2br(print_r($output)).'<br>';
    echo 'err : '.$err.'<br>';
    Ne me retourne aucune erreur :

    CMD : start moviemk.exe
    Array ( ) output : 1
    err : 0
    De plus il lance bien le processus
    ►Ne pas oublier le

Discussions similaires

  1. Réponses: 12
    Dernier message: 28/04/2009, 09h20
  2. [Système] Exécuter une ligne de commande
    Par fordprobe dans le forum Langage
    Réponses: 2
    Dernier message: 09/07/2007, 14h46
  3. [Système] Exécuter une commande java avec exec()
    Par kenny49 dans le forum Langage
    Réponses: 2
    Dernier message: 05/06/2007, 09h29
  4. Exécuter une commande système avec perl
    Par Olivier Regnier dans le forum Langage
    Réponses: 12
    Dernier message: 08/04/2007, 16h41
  5. exécuter une commande système à partir de sqlplus?
    Par c_moi_c_moi dans le forum Oracle
    Réponses: 24
    Dernier message: 08/11/2005, 15h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo