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 :

Shell_exec ne marche pas à tous les coups [PHP 5.2]


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Homme Profil pro
    Responsable des études
    Inscrit en
    Octobre 2005
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable des études

    Informations forums :
    Inscription : Octobre 2005
    Messages : 11
    Points : 12
    Points
    12
    Par défaut Shell_exec ne marche pas à tous les coups
    Bonjour,

    Je bute sur un problème avec shell_exec(). Je souhaite imprimer ligne par ligne sur une imprimante matricielle (et oui, on continue de les utiliser) et donc j'ai réussi cette prouesse en utilisant la ligne de commande "type fichierAImprimer.txt > LPT1" sous dos.
    Mon problème est qu'en utilisant ce code ça ne fonctionne pas à tous les coups :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $fichier = "impression.txt";
    $commande = "type $fichier > LPT1\r";
    $result = shell_exec($commande);
    alors que quand je le fais via DOS ça fonctionne à tous les coups.

    Il y aurait-il un moyen de vérifier si la fonction DOS a bien été exécutée ?
    Il y aurai-t-il un autre moyen pour imprimer ligne par ligne en utilisant JavaScript (car sur ce que j'ai essayé à chaque fois ça imprime la page entière) ?

  2. #2
    Expert confirmé
    Avatar de Thes32
    Homme Profil pro
    Développeur PHP, .Net, T-SQL
    Inscrit en
    Décembre 2006
    Messages
    2 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur PHP, .Net, T-SQL

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 379
    Points : 4 853
    Points
    4 853
    Par défaut
    Salut,

    Mon problème est qu'en utilisant ce code ça ne fonctionne pas à tous les coups :
    Qu'as tu ? un messager d'erreur ? Que donne $result ?
    Développeur | Zend Certified Engineer

    Étapes Pour mieux se servir du forum:
    1. Commencez par lire les cours et tutoriels ;
    2. Faites une recherche;
    3. Faites un post si rien trouvé dans les deux étapes précédentes en respectant les règles;

    Nix>_Rien n'est plus pratique que la théorie

  3. #3
    Membre à l'essai
    Homme Profil pro
    Responsable des études
    Inscrit en
    Octobre 2005
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable des études

    Informations forums :
    Inscription : Octobre 2005
    Messages : 11
    Points : 12
    Points
    12
    Par défaut
    Bonjour Thes32,

    Dans $result j'ai rien (i.e string "") comme si j'avais tapé la commande dans le shell DOS. C'est d'ailleurs le problème, j'ai pas de moyen de contrôler si tout s'est bien passé.

    J'ai l'impression que l'imprimante est toujours en état "en cours d'impression" mais je ne sais pas comment le savoir avec une simple commande DOS.

    J'utilise un programme DOSPrint.exe pour rediriger le port LPT1 vers le port USB de mon imprimante. Je vais voir si je peux utiliser ce programme ou un autre avec une ligne de commande adéquat en DOS.

  4. #4
    Membre à l'essai
    Homme Profil pro
    Responsable des études
    Inscrit en
    Octobre 2005
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable des études

    Informations forums :
    Inscription : Octobre 2005
    Messages : 11
    Points : 12
    Points
    12
    Par défaut Solution
    Bonjour,

    Ma méthode précédente par envoi de commande DOS était complexe à mettre en oeuvre.

    J'ai trouvé la solution par une méthode qui consiste à utiliser un logiciel permettant d’imprimer. Le logiciel choisi est « PrFile32.exe ». En tapant la ligne de commande « PrFile32 /n:Trace /q fichier.txt » on peut alors imprimer. Ceci nécessite préalablement de bien configurer le logiciel pour l’imprimante souhaitée. La configuration est sauvegardée sous le nom « Trace » et fait partie de la ligne de commande, juste après le "/n:". Cette méthode impose d’avoir le fichier exécutable dans le répertoire courant et reste moins complexe à mettre en œuvre. C’est pourquoi cette solution a été choisie.
    La fonction « imprimer(…) » ci-dessous permet de créer un fichier texte et de l’envoyer à l’imprimante. Pour envoyer une commande on utilise « shell_exec() ».

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    function imprimer($lignesAImprimer){
    	// creation fichier txt
    	$fichier = "impression.txt";
    	if (file_exists($fichier)) {
    		$fp = fopen ($fichier, "w");
    	} else {
    		// creation fichier
    		touch($fichier);
    		$fp = fopen ($fichier, "w");
    	}
    	// on ajoute une table
    	fwrite($fp,$lignesAImprimer);
    	// ferme le fichier
    	fclose($fp);
     
    	// METHODE LOGICIEL
    	$fichier = escapeshellarg($fichier);
    	$commande = "PrFile32 /n:Trace /q $fichier\r";
    	$result = shell_exec($commande);
     
    	return $result;
    }

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

Discussions similaires

  1. Réponses: 11
    Dernier message: 24/01/2013, 09h00
  2. Fonction Find ne marche pas à tous les coups...
    Par silvere123 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 01/08/2012, 15h54
  3. Mon diaporama ne s'affiche pas à tous les coups !
    Par dekaki dans le forum jQuery
    Réponses: 2
    Dernier message: 17/11/2011, 09h08
  4. [RegEx] expression ne fonctionne pas à tous les coup
    Par elcoyotos dans le forum Langage
    Réponses: 2
    Dernier message: 17/09/2010, 08h03
  5. [XP] Bips au démarrage - ne démarre pas à tous les coups
    Par kevain_09 dans le forum Windows XP
    Réponses: 3
    Dernier message: 25/06/2007, 20h18

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