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 :

commandes exec() & system() : lancement d'un script externe


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Inscrit en
    Novembre 2006
    Messages
    150
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Novembre 2006
    Messages : 150
    Points : 48
    Points
    48
    Par défaut commandes exec() & system() : lancement d'un script externe
    Bonsoir à tous,

    j'essaye de lancer un script vbs externe (sur mon serveur web, à la racine). Mon script se lance bien :
    - sans arguments
    - avec des arguments (sans espaces)

    Mais dés que je veux rajouter une variable (mon argument) contenant un ou plusieurs espaces l'exécution ne se fait pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $vbs_query = """ . "	cscript.exe .\working_dir.vbs" ."""." " .  """ . $sshortcutname . """ . " " . """ . $nametimestamp . """ ;
     
    		echo ",".$vbs_query."," ;

    Résultat :
    "cscript.exe .\working_dir.vbs" "test2122.cmd - Shortcut" "coucou | 2011-11-03 16:09:13"
    quand je fais un exec($vbs_query) ça ne me récupère pas bien mes arguments..

    j'ai aussi essayé la commande system() :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    system("cscript.exe .\working_dir.vbs", $sshortcutname, """.$nametimestamp.""") ;
    Jdois avoir un problème (et on en a tous) avec ces guillemets/simples quotes de *biiiiiiiiiiiiip* .... Mais j'ai perdu trop de cheveux aujourd'hui , d'où ma venue sur le forum

    Merci pour votre aide

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    utilise sprintf et escapeshellarg, pour faire une chaine propre, ensuite sache que si t'essaye de lancer une commande via le serveur web c'est très limité

  3. #3
    Membre du Club
    Inscrit en
    Novembre 2006
    Messages
    150
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Novembre 2006
    Messages : 150
    Points : 48
    Points
    48
    Par défaut
    J'ai besoin malheureusement de cette chaine car le shortcut (.lnk) que je souhaite modifier dans le vbs porte ce nom (aussi moche soit-il )
    du coup je dois garder les tirets et autres espaces

  4. #4
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    Citation Envoyé par olivier1209 Voir le message
    J'ai besoin malheureusement de cette chaine car le shortcut (.lnk) que je souhaite modifier dans le vbs porte ce nom (aussi moche soit-il )
    du coup je dois garder les tirets et autres espaces
    ?
    ça n’empêche en rien l'utilisation de ces fonctions

  5. #5
    Membre du Club
    Inscrit en
    Novembre 2006
    Messages
    150
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Novembre 2006
    Messages : 150
    Points : 48
    Points
    48
    Par défaut
    ben si je change le paramêtre envoyé le résultat obtenu en sorti est erroné , faux ?
    ou alors cette fonction formate en entrée et remet en forme initiale en sortie..


    dans mon VBS en gros pour vérifier mes arguments j'ai un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WScript.echo (Arg(0) & Arg(1))

  6. #6
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    les fonctions servent uniquement a formater ta chaine, montre comment tu les as utilisé

  7. #7
    Membre du Club
    Inscrit en
    Novembre 2006
    Messages
    150
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Novembre 2006
    Messages : 150
    Points : 48
    Points
    48
    Par défaut
    un truc de ce genre ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    system('cscript.exe' . escapeshellarg("\working_dir.vbs " . $sshortcutname . "&#34".$nametimestamp."&#34")) ;

  8. #8
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    Citation Envoyé par olivier1209 Voir le message
    un truc de ce genre ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    system('cscript.exe' . escapeshellarg("\working_dir.vbs " . $sshortcutname . """.$nametimestamp.""")) ;
    mais non, regarde bien la doc de sprintf ...
    et met ta commande dans un variable plutôt, vérifie la avant de lancer system

  9. #9
    Membre du Club
    Inscrit en
    Novembre 2006
    Messages
    150
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Novembre 2006
    Messages : 150
    Points : 48
    Points
    48
    Par défaut
    C'est bon merci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $query = 'cscript.exe .\working_dir.vbs ';
    $sshortcutname_escape = escapeshellarg($sshortcutname) ;
    $nametimestamp_escape = escapeshellarg($nametimestamp) ;
    system($query . $sshortcutname_escape . " ". $nametimestamp_escape) ;

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. commande system sans interruption du script appelant
    Par alex77722 dans le forum Langage
    Réponses: 7
    Dernier message: 25/01/2013, 09h19
  2. Blockage du programme php lors du lancement de la commande exec
    Par alais dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 11/05/2012, 16h18
  3. Commande "exec" dans un script TCL
    Par majemoi dans le forum Tcl/Tk
    Réponses: 2
    Dernier message: 18/08/2011, 20h49
  4. Commandes exec ou system avec threads
    Par Pandapi dans le forum C
    Réponses: 10
    Dernier message: 02/11/2009, 17h31
  5. [Appli Console]Pb exec command ac fct system(const char *)
    Par Le_magicien999 dans le forum MFC
    Réponses: 2
    Dernier message: 16/08/2005, 16h07

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