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 :

Exécuter un .BAT


Sujet :

Langage PHP

  1. #1
    Membre à l'essai Avatar de Mak-chan
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2017
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Jura (Franche Comté)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Août 2017
    Messages : 11
    Points : 12
    Points
    12
    Par défaut Exécuter un .BAT
    Bonjour à tous,
    J'ignore si ce que je cherche à faire est faisable en PHP ou se verrait préférable en JS mais puisqu'aucun de mes essais n'aboutit, je viens tenter d’obtenir de l'aide ici ^^"

    Problème :

    J'ai un serveur Linux sur lequel est hébergé un site qui génère des résultats dans des supers fichiers .txt ...
    Mon but, simplement, les imprimer dès leurs générations de façon automatique mais surtout "PURE", soit sans fioriture du genre des rajouts de mise en page qu'on trouve sur une impression HTML...

    En conséquences je me tourne vers un Script MSDOS (.bat) qui, avec la fonction PRINT, serait capable d'imprimer ce que je veux, comme je le veux avec une commande telle que :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print /D:\\0.0.0.0\IMPRIMANTE_RESEAU %CD%\test_imp.txt
    (Mon imprimante est distribuée par 0.0.0.0 sur le réseau (oui l'IP ici est faux), %CD% renvois le répertoire courant du Script, puisque le fichier .txt est au même endroit)

    (Je n'ai pas trouvé directement en PHP...)

    Je test le tout en local pour commencer, p'ti serveur WAMP, projet PHP 7.0 / Laravel 5.2 ...

    Tout va bien, tout est beau, mes scripts fonctionnent, l'impression se fait, oui mais voilà : lancer ce script en PHP (après la génération du document.txt) je n'y arrive résolument pas ..
    J'ai bien des pistes telles que :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <?php
    exec('start C:\wamp\www\mon_projet\test.bat', $output);
    print_r($output);
    ?>
     
    -- Ou encore : --
    <?php
    $output = exec('C:/wamp/www/mon_projet/test.bat');
    print_r($output);
    ?>
     
    -- Avec, dans le .bat, une ligne : --
    cd %~dp0
    --  --
    Mais rien à faire ! La première tourne 1H sans succès et la seconde m'affiche le contenu du .bat sans rien exécuter -_-
    Mon script est pour l'instant une simple vérification telle que :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    @echo off
    cd %~dp0
     
    echo HELLO CMD
     
    pause > nul
    Qui fonctionne bien lors-qu’exécutée à part...

    A savoir que le script est placé dans le dossier public de mon projet de test, soit réellement : C:\wamp64\www\mon_projet\public\mon-script.bat.
    La page depuis laquelle je tente son appel se trouve quant-à-elle dans "views" (c'est un projet laravel) soit : C:\wamp64\www\mon_projet\resources\views\welcom.php.

    J'ai essaie des appels de mon script depuis le chemin absolu, comme relatif, y comprit avec la fonction url(); qui me retourne l'URL du projet (http://localhost/mon_projet/public/), y compris en indiquant pas "/public"....

    Mais ça ne change rien, sinon l'affichage du contenu qui disparait..

    Cet affichage prouve bien que mon Application accède au bon fichier non ?!

    Je reste sur la syntaxe suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <?php
        $output = exec('C:\wamp64\www\mon_projet\public\mon-script.bat');
        print_r($output);
        ?>
    Si je laisse juste la fonction exec telle quelle (sans $output) et que je la débug, j'en vois encore le contenu mais rien ne s'exécute !

    BREF, j'ai besoin de votre aide et je m'excuse si comme à mon habitude je tourne autour d'un misérable ";" qui manque et d'une erreur toute c*nne ^^".

  2. #2
    Membre extrêmement actif
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2018
    Messages
    537
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Avril 2018
    Messages : 537
    Points : 634
    Points
    634
    Par défaut
    Bonjour,

    Ce ne sera pas le même code à l'intérieur ton script, pour linux et pour windows
    La commande ne sera pas la même

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    exec('./test');
    exec('sh test');
    Il faudra rendre d'abord le fichier executable sur ton serv linux et ajouter un shebang

    exemple:

  3. #3
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 692
    Points : 20 244
    Points
    20 244
    Par défaut
    Tu parles de serveur linux mais tu fais des scripts bat , du coup je vois pas bien où tu veux aller. Il est évident qu'un script windows ne fonctionnera pas sous linux.

    Ensuite, pour executer un programme externe en PHP tu as le choix grosso modo entre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    exec();
    system();
    passthru();
    qui font toutes la même chose (executer un programme externe) mais de manière différente. Voir les docs pour le détail.

    Si tes scripts fonctionnent lancés manuellement mais pas via PHP c'est très souvent un problème de permission. I lne faut pas oublier que c'est l'utilisateur associé à apache qui va exécuter php et donc tes scripts...

  4. #4
    Membre à l'essai Avatar de Mak-chan
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2017
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Jura (Franche Comté)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Août 2017
    Messages : 11
    Points : 12
    Points
    12
    Par défaut
    Bonjour,
    Oui, je parle de Linux tout en faisant des scripts .BAT, pour la bonne et simple raison que Linux = Environnement de Production et Windows = Environnement de Test.

    En étant à la phase tests, j'ai choisi de mettre l'accent sur un .bat, ne trouvant pas de solution alternative qui corresponde à mes besoins.

    'Fin bref,
    J'ai finis par trouver mon bonheur avec la dérivée de la fonction exec(); de PHP -> shell_exec();
    J'ai testé en production et Linux est bien capable de me lancer mon script en ".sh", merci @bonjourajax de m'y avoir fait pensé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php shell_exec("sudo /var/www/scripts/partage.sh"); ?>
    Problème résolu, merci pour vos aiguillages ^^

  5. #5
    Membre extrêmement actif
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2018
    Messages
    537
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Avril 2018
    Messages : 537
    Points : 634
    Points
    634
    Par défaut
    Bonjour

    pas de soucis!

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

Discussions similaires

  1. lancer un .bat et cacher la fenetre dos
    Par peppena dans le forum Scripts/Batch
    Réponses: 28
    Dernier message: 06/07/2019, 15h42
  2. DOS passage de parametre à un .bat
    Par malbaladejo dans le forum Scripts/Batch
    Réponses: 5
    Dernier message: 26/11/2014, 16h44
  3. [.bat] Problème d'exectution
    Par norac dans le forum Scripts/Batch
    Réponses: 4
    Dernier message: 10/12/2003, 17h21
  4. test de l'exectuion d'un bat par Shellexecute
    Par Argonz dans le forum C++Builder
    Réponses: 8
    Dernier message: 10/12/2003, 09h18
  5. [Classpath] problème de création de setclasspath.bat
    Par worldchampion57 dans le forum Général Java
    Réponses: 7
    Dernier message: 06/05/2003, 14h32

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