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 :

Lancer un fichier .bat en PHP pour impression directe


Sujet :

Langage PHP

  1. #1
    Candidat au Club
    Homme Profil pro
    informatique
    Inscrit en
    Décembre 2016
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : informatique
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2016
    Messages : 13
    Points : 4
    Points
    4
    Par défaut Lancer un fichier .bat en PHP pour impression directe
    Bonjour,

    Je préfère commencer en indiquant que je suis un débutant et n'ai pas forcément les bons réflexes, je suis donc ouvert à toutes propositions, chaque jour m'en apprends d'avantage .

    j'ai lu pas mal de chose autour de cette demande, mais je ne parviens pas à le faire fonctionner, je ne comprends pas d’où vient le problème.

    j'explique l'idée.

    j'ai créé un site intranet pour ma société avec symfony 5/ WAMP sous Windows et une page a pour but d'imprimer des étiquettes sur une imprimante spécifique du serveur, d’après ce que j'ai lu, il n'est pas possible d'imprimer directement (sans la boite d'impression) sur une imprimante spécifique avec PHP. à savoir que je suis administrateur de ce serveur.

    Je me suis donc dis, pas grave, je vais créer un fichier bat qui lance l'impression du fichier en question et je vais appeler ce fichier bat avec php quand j'en ai besoin.

    à savoir que le nom du fichier sera toujours le même et il se trouve toujours au même endroit, il est généré avant l'impression et supprimer après impression.

    j'ai voulu faire ultra simple pour avancer pas à pas, j'ai donc ajouté dans mon contrôleur une fonction qui lance uniquement le bat quand j'appuie sur un bouton.

    Mon fichier bat pour les tests
    Code bat : Sélectionner tout - Visualiser dans une fenêtre à part
    start C:\Users\WEBSRV.AXIS\Desktop\ean.pdf
    quand je clique dessus pour l’exécuter, ça fonctionne sans problème, mon fichier PDF s'ouvre (je sais, je veux imprimer, mais j'y vais étape par étape)

    je veux donc le lancer avec PHP
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $route = 'C:\Users\WEBSRV.AXIS\Desktop\runPrintEtiquette.bat';
    shell_exec($route);
    j'ai également tester avec exec()

    et ..... rien ne se passe .... le problème étant que je n'ai pas d'info sur ce que je fais mal

    je tente donc une autre approche avec popen

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    $route = 'C:\Users\WEBSRV.AXIS\Desktop\runPrintEtiquette.bat';
     
            error_reporting(E_ALL);
     
            // Ajoute une redirection pour que vous puissiez lire stderr.
            $handle = popen($route, 'r');
            $rapport = "'$handle'; " . gettype($handle) . "\n";
            $read = fread($handle, 2096);
            $read;
            pclose($handle);
     
            $this->addFlash('info', $rapport);
            $this->addFlash('info', $read);
            return $this->redirectToRoute('app_print_empl');
    et les messages flashs m'affichent 2 choses

    pour le $rapport => 'Resource id #18'; resource

    pour le $read => C:\wamp64\www\Intranet\public>start C:\Users\WEBSRV.AXIS\Desktop\ean.pdf
    donc à priori, il capte bien le start qui se trouve dans le fichier bat, donc je ne fais pas d'erreur sur l'écriture de la route.

    j'ai donc besoin d'aide pour cette première étape qui ne consiste qu'a lancer le fichier bat.

    évidement une fois que ce lancement de bat par PHP fonctionnera, il faudra modifier le bat pour qu'il lance directement l'impression, ce que je n'ai pour l'instant pas réussi à faire non plus

    Voici mon code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print \\srvad\IMP_EAN_PRODUIT C:\Users\WEBSRV.AXIS\Desktop\ean.pdf
    et le résultat => Impossible d’initialiser le périphérique PRN

    je compte sur vous pour me filer un coup de main, je suis bloquer depuis pas mal de temps la dessus.

    d'avance merci.

    cdt,

  2. #2
    Candidat au Club
    Homme Profil pro
    informatique
    Inscrit en
    Décembre 2016
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : informatique
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2016
    Messages : 13
    Points : 4
    Points
    4
    Par défaut Impression Ok
    Il ne me reste plus que le lancement du bat avec php, j'ai réussi à imprimer avec le bat les fichiers pdf du dossier et à les supprimer au fil de l'eau grâce à ça https://codeload.github.com/stylersn...s/heads/master

    quelqu'un peu m'aider please, je suis en galére

  3. #3
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 440
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 440
    Points : 15 814
    Points
    15 814
    Par défaut
    essayer de lancer la commande avec passthru, peut-être que vous verrez un message d'erreur :
    https://www.php.net/manual/fr/function.passthru.php

  4. #4
    Candidat au Club
    Homme Profil pro
    informatique
    Inscrit en
    Décembre 2016
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : informatique
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2016
    Messages : 13
    Points : 4
    Points
    4
    Par défaut Pas de message d'erreur
    Merci pour ton retour, c'est cool,

    j'ai essayé et n'obtient malheureusement pas d'erreur.

    d'ailleurs cela a évolué, quand j'ai suivi les conseils de ce post

    https://openclassrooms.com/forum/suj...puis-php-99427

    maintenant ça se lance en parti à partir de PHP,

    quand je lance le fichier bat en double cliquant dessus, il imprime puis supprime le fichier => donc nickel

    quand je le lance à partir de mon script PHP, il ne fait que supprimer le fichier, l'impression ne s'effectue pas

    je ne comprends pas pourquoi il n'y a que la moitié du travail qui est effectué

  5. #5
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 440
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 440
    Points : 15 814
    Points
    15 814
    Par défaut
    ça peut venir du serveur apache qui n'a pas les même autorisations que l'utilisateur.
    mais ensuite je ne m'y connais pas en autorisations windows donc je ne pourrai pas vous aider davantage.

  6. #6
    Candidat au Club
    Homme Profil pro
    informatique
    Inscrit en
    Décembre 2016
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : informatique
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2016
    Messages : 13
    Points : 4
    Points
    4
    Par défaut lancé en partie
    je ne pense pas que cela vienne des droits car j'arrive en partie à l’exécuter

    quand je double clique sur mon fichier print.bat, ça ouvre les fichiers pdf , ça imprime tous les fichiers pdf du dossier, ça les referme et ça les supprimes => nikel j'ai réussi cette partie grâce à ces fichiers https://codeload.github.com/stylersn...s/heads/master que j'ai un peu adapté et ajouté le del de mon fichier ean.pdf aprés impression

    Lorsque je le lance à partir du script PHP, ça ne fait que supprimer le pdf, pas d'ouverture de fichier et donc l'impression n'est pas lancé

    Selon moi, le problème vient du fait que mon PDF n'est pas ouvert quand je lance le bat à partir de PHP, alors que le BAT imprimer les fichiers ouverts puis les refermes, techniquement, je n'ai pas besoin de les ouvrir, juste de les imprimer et de les supprimer, mais j'avoue ne pas savoir comment le coder en .bat

    d’après ce que j'ai vu c'est

    print fichier mais ça ne fonctionne ça me note une erreur dans la console

  7. #7
    Candidat au Club
    Homme Profil pro
    informatique
    Inscrit en
    Décembre 2016
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : informatique
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2016
    Messages : 13
    Points : 4
    Points
    4
    Par défaut Up ! please
    Un coup de main svp, je suis en galére, je ne comprends pas

    ci dessous ma fonction qui lance mon bat

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    /**
         * @Route("/bat", name="app_bat")
         */
        public function bat(): Response
        {
            $route = 'C:\wamp64\www\Intranet\bin\print.bat';
            $output = passthru($route, $err);
            //print_r($output);
            dd($err);
     
            $this->addFlash('success', $err);
            return $this->redirectToRoute('app_print_empl');
        }
    le fameux bat print.bat

    Code bat : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    cd %~dp0
    REM Kill all existings Reader instance
    taskkill /F /IM AcroRd32.exe
     
    REM Launch the background script to kill the Acrobat Reader after each print because he don't do that itself
    start cmd.exe /c kill.bat
     
    REM Launch the loop to print all the files in the folder and launch back the program killer after each print
    for %%i in (*.pdf) do (
    	"C:\Program Files (x86)\Adobe\Acrobat Reader DC\Reader\AcroRd32.exe" /t "%%i"
    	start cmd.exe /c kill.bat
    )
     
    del ean.pdf

    et le bat kill.bat qui vient fermer adobe à chaque fois
    Code bat : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    cd %~dp0
    REM Default timer to give some time for Adobe Reader to print the file
    timeout 1
     
    REM Kill Adobe Reader after printing
    taskkill /F /IM AcroRd32.exe

    Quand je lance le bat manuellement, ça fonctionne nikel, mon PDF s'ouvre, il s'imprime et se supprime.

    quand je le lance avec PHP, mon fichier se supprime bien grâce au bat, mais rien n'alimente la file d'impression ....

    j'ai mis les fichiers bat en "lancer en tant d'administrateur" pour tous les utilisateurs du réseau (enfin je pense) ainsi qu'adobe

    pourquoi une partie du bat se lance bien (la suppression du fichier à la fin) mais pas l'impression.

    Voici le dump

    Code bat : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    C:\wamp64\www\Intranet\public>
    cd C:\wamp64\www\Intranet\bin\ 
    C:\wamp64\www\Intranet\bin>
    REM Kill all existings Reader instance 
    C:\wamp64\www\Intranet\bin>taskkill /F /IM AcroRd32.exe 
    C:\wamp64\www\Intranet\bin>
    REM Launch the background script to kill the Acrobat Reader after each print because he don't do that itself 
    C:\wamp64\www\Intranet\bin>start cmd.exe /c kill.bat 
    C:\wamp64\www\Intranet\bin>REM Launch the loop to print all the files in the folder and launch back the program killer after each print 
    C:\wamp64\www\Intranet\bin>
    for %i in (*.pdf) do ( "C:\Program Files (x86)\Adobe\Acrobat Reader DC\Reader\AcroRd32.exe" /t "%i" start cmd.exe /c kill.bat ) 
    C:\wamp64\www\Intranet\bin>( "C:\Program Files (x86)\Adobe\Acrobat Reader DC\Reader\AcroRd32.exe" /t "ean.pdf" start cmd.exe /c kill.bat ) 
    C:\wamp64\www\Intranet\bin>del ean.pdf 
    C:\wamp64\www\Intranet\bin>pause Appuyez sur une touche pour continuer...

    please help

  8. #8
    Membre chevronné
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    721
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 721
    Points : 1 880
    Points
    1 880
    Par défaut
    Au début vous étiez parti sur la commande shell_exec, mais quel dommage que vous ne cherchez pas à lire l'output de cette commande. Il y aurait probablement un message d'erreur explicite. https://www.php.net/manual/en/function.shell-exec

    Et plutôt que de fixer un délai arbitraire pour laisser du temps à l'impression de se lancer j'essaierais de lancer le process avec START /WAIT ...

  9. #9
    Candidat au Club
    Homme Profil pro
    informatique
    Inscrit en
    Décembre 2016
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : informatique
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2016
    Messages : 13
    Points : 4
    Points
    4
    Par défaut Changement de plan, même résultat ...
    Bonjour,

    Merci pour ton retour, c'est sympa de ta part

    au vu du statisme dans lequel je me trouve avec bat, j'ai basculé sur PowerShell !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Set-ExecutionPolicy Unrestricted -Force
     
    $MYFILE = "C:\wamp64\www\Intranet\bin\ean.pdf"
    $MYPRINTER = "IMP_EAN_PRODUIT" 
     
    $DEFAULTPRINTER = (Get-CimInstance -ClassName CIM_Printer | WHERE {$_.Default -eq $True}[0])
    $PRINTERTMP = (Get-CimInstance -ClassName CIM_Printer | WHERE {$_.NAme -eq $MYPRINTER}[0])
    $PRINTERTMP | Invoke-CimMethod -MethodName SetDefaultPrinter | Out-Null
    Start-Process -FilePath $MYFILE -Verb print -PassThru
    $DEFAULTPRINTER | Invoke-CimMethod -MethodName SetDefaultPrinter | Out-Null
     
    #Start-Process -FilePath $MYFILE -Verb print -PassThru
    Start-Sleep -Seconds 1
    Remove-item C:\wamp64\www\Intranet\bin\ean.pdf
    j'ai Activer l’exécution du script
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Scope ExecutionPolicy
            ----- ---------------
    MachinePolicy       Undefined => celui là je n'arrive pas à le modifier
       UserPolicy    Unrestricted
          Process    Unrestricted
      CurrentUser    Unrestricted
     LocalMachine    Unrestricted
    et ben même problème ! le fichier fonctionne très bien en lancement direct, mais lorsque je le lance à partir de php, ça ne fait que supprimer le fichier.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    /**
         * @Route("/bat", name="app_bat")
         */
        public function bat(): Response
        {
            $route = 'C:\wamp64\www\Intranet\bin\print.ps1';
            // Fonctionne en partie, supprime mais n'imprime pas
            $output = shell_exec('powershell -executionpolicy Unrestricted -command "& {"C:\wamp64\www\Intranet\bin\print.ps1"; exit $err}"');
            dd($output);
     
            $this->addFlash('success', $output);
            return $this->redirectToRoute('app_print_empl');
        }

    Voici le dump

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Handles  NPM(K)    PM(K)      WS(K)     CPU(s)     Id     SI ProcessName                                                  
    -------  ------    -----      -----     ------     --  -- -----------                                                  
         64       7           1288       6912        0,00     19028   0   Acrobat
    cdt,

  10. #10
    Membre chevronné
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    721
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 721
    Points : 1 880
    Points
    1 880
    Par défaut
    Supposons que le fichier est effacé trop vite. Commentez la ligne qui supprime le fichier et relancez le script via PHP, et vous verrez si ça fait une différence.
    C'est un test simple à réaliser.
    Je vous conseille aussi de lancer Start-Process avec le paramètre -Wait.

    Doc

  11. #11
    Candidat au Club
    Homme Profil pro
    informatique
    Inscrit en
    Décembre 2016
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : informatique
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2016
    Messages : 13
    Points : 4
    Points
    4
    Par défaut Tests déjà effectués
    Bonjour,

    Merci pour ton retour, c'est sympa , j'ai déjà fait ce type de test et malheureusement sans succès.

    sur un autre forum, monkey3d m'oriente vers https://symfony.com/doc/current/components/process.html, je vais faire les tests.

    cdt,

  12. #12
    Candidat au Club
    Homme Profil pro
    informatique
    Inscrit en
    Décembre 2016
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : informatique
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2016
    Messages : 13
    Points : 4
    Points
    4
    Par défaut j'en suis là
    re,

    merci encore pour ton investissement, ça fait chaud au cœur

    j'ai installé le composant, et pas de chance j'ai encore et toujours le même résultat.

    Ci dessous, voici ce que j'obtiens quand je le lance à partir de la console Powershell

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Handles  NPM(K)    PM(K)      WS(K)     CPU(s)     Id  SI ProcessName                               
    -------  ------    -----      -----     ------     --  -- -----------                               
        159      10       6024      14176       0,06    35588   2 Acrobat
    et voici ce que j'obtiens quand je le lance à partir de PHP

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Handles  NPM(K)    PM(K)      WS(K)     CPU(s)     Id  SI ProcessName                                                 
     
     
    -------  ------    -----      -----     ------     --  -- -----------                                                 
     
     
         64       7          1272       6960       0,02     2540   0 Acrobat
    Je ne sais pas si c'est une piste, mais on peut voir que dans la colonne SI, avec la console j'ai toujours 2 alors qu'avec PHP j'ai toujours 0.

    Donc le fichier se supprime bien grâce au lancement de powershell, mais il ne s'imprime pas.

    j'ai retiré la suppression du fichier dans le powershell et il ne s'imprime pas non plus.

    cdt,

Discussions similaires

  1. Lancer un fichier .bat avec une page PHP
    Par arezki76 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 8
    Dernier message: 09/11/2009, 10h47
  2. [C#] lancer un fichier .bat
    Par damned3 dans le forum Windows Forms
    Réponses: 6
    Dernier message: 24/09/2006, 14h10
  3. [DOM XML] Insertion données dans fichier XML avec PHP pour Flash ?
    Par ExSter dans le forum Bibliothèques et frameworks
    Réponses: 17
    Dernier message: 10/05/2006, 12h16
  4. Lancer un fichier BAT
    Par bug_warrior dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 03/03/2006, 18h12

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