8791 sujets

Développement web côté serveur, CMS

Bonsoir,

Après plusieurs heures de recherche, je n'arrive pas à trouver une solution car je dois envoyer un fichier texte à une imprimante avec l'instruction : COPY "C:\fichierTexte.txt" LPT2

Cette instruction se trouve dans un .cmd. Donc quand je lance le .cmd à la main, il n'y a pas de souci, l'impression se passe bien, par contre lorsque je passe par PHP, rien ne se passe.

Voici la commande que j'exécute :
$result = shell_exec('C:\Windows\System32\cmd.exe /c C:\wamp\www\essai\test.cmd');   


Quand je met un simple mkdir nomDossier dans test.cmd, tout se passe nickel , le dossier est bien créé. Par contre quand c'est un COPY... ce n'est pas la même.

Si vous avez des idées, je suis preneur.

Merci d'avance pour votre aide.
Tu n'as aucun message d'erreur côté php ?

Plusieurs pistes à explorer :
1 - Vérifier que tu as bien les droits pour utiliser la fonction shell_exec. Cette fonction est souvent désactivée, par exemple en safe mode; mais dans ce cas tu devrais avoir un warning php.
2 - Vérifier que l'utilisateur d'apache/php a bien le droit d'appeler le shell. ON peut désactiver le shell pour les non-administrateurs. De même pour l'imprimante et le fichier ! Pour en avoir le coeur net, redirige le flux d'ereur (stderr) avec 2>fichier.log pour voir, il y a peut-être une erreur que tu as ratée.
3 - As-tu essayé d'appeler ton fichier .cmd directement (p.ex. shell_exec('machin.cmd')) ? Et si tu utilises un .bat à la place ? Dans mes souvenirs on pouvait envoyer "dir" directement, donc ça devrait fonctionner sans passer par cmd.exe
Bonsoir,

Je te remercie pour ta réponse. Au niveau des droits il n'y a pas de souci car si je met par exemple mkdir nomFichier dans mon .cmd et que je le lance depuis le PHP il n'y a pas de souci, il se crée bien . Par contre avec le "COPY..." si j'affiche le résultat $result, j'obtiens la commande lancée avec l'info : 0 fichier(s) copi‚(s).

Et c'est là que pose le souci je suppose...

Si tu as d'autres idées, je suis preneur ! Merci !
Tu as essayé avec un .bat au lieu du .cmd ?
ET la commande type truc >LPT1 à la place de copy ? On ne sait jamais...

IL y a peut-être une différence d'interprétation des fichiers spéciaux entre .bat et .cmd, vu que .cmd est l'extension des power shell si je ne me trompe pas, et vu qu'on peut forcer un fichier à s'appeler LPT1 en unicode ("\\?\\LPT1") mais pas en ANSI.

Sinon, sauf erreur, on peut imprimer un fichier texte avec notepad /P fichier aussi. A vérifier si ça ne fait pas apparaître la boîte de dialogue.
C'est bon j'ai trouvé d'où venait mon souci ! Je pensais qu'en lançant une seule fois ma commande NET USE... çà allait marcher, j'allais toujours pouvoir faire mon COPY ... comme j'avais l'habitude de le faire en lançant mon .cmd depuis une invite de commandes. Et au final en mettant à chaque fois la commande NET USE et en appelant mon .cmd depuis le PHP, çà marche nickel !

Je te remercie pour ton aide et tes pistes de recherche ! Smiley cligne

P.S. : à quoi correspond le message vide de Mox ?