J’essaie d’imprimer des formulaires / reçus générés via PHP (les imprimantes seront installées sur le serveur, je n’essaie pas d’imprimer sur l’imprimante locale d’un utilisateur). J’ai décidé d’essayer la méthodologie suivante:
EN PHP:
IN perl:
system()
pour “ouvrir” Reader et imprimer le fichier PDF en mode silencieux. Ce qui fonctionne:
printf
semblent fonctionner correctement lorsque la sortie est affichée dans le navigateur. Ce qui ne marche pas:
system('"C:\\Program Files (x86)\\Adobe\\Reader 10.0\\Reader\\AcroRd32.exe" /N /T "C:\\test.pdf" 0-XEROX');
Ce qui se produit:
Ce que j’ai essayé:
Everyone - Full Control
. $?
après l’appel system()
. C’est 1
, mais je ne sais pas ce que cela signifie dans ce cas. disable_functions
répertoriées dans php (bien que je pense que cela n’a aucun rapport puisque shell_exec
semble fonctionner, car une partie du code perl est exécutée). system()
. Autre info:
Je suis désolé ici, et bien qu’il semble que ce soit un problème d’Apache / de permissions, je ne peux pas en être sûr. Mon expérience avec Apache est limitée et la plupart de ce que je trouve en ligne sont des commandes Linux qui ne fonctionnent pas dans mon environnement.
Essaye ça:
my @args = ('C:/Program Files (x86)/Adobe/Reader 10.0/Reader/AcroRd32.exe'); if (system(@args) != 0) { # Can't run acroread. Oh Noes!!! die "Unable to launch acrobat reader!\n"; }
La chose à propos de system () est qu’elle fait deux choses différentes en fonction du nombre et du type d’argument. Si l’argument est un tableau ou s’il y a plusieurs arguments, Perl suppose que le premier est le programme à exécuter avec le rest comme arguments et qu’il lance le programme lui-même.
Si, cependant, il ne s’agit que d’une chaîne, Perl le gère différemment. Il exécute votre interpréteur de ligne de commande (généralement CMD.EXE sous Windows) sur la chaîne et lui permet de faire ce qu’il veut avec. Cela devient rapidement problématique.
Tout d’abord, Perl et le shell effectuent différents types d’interpolation sur la chaîne (par exemple, remplacer “//” par “/”, marquer par espace, etc.) et il devient très facile de perdre la trace de ce qui fait quoi. Je ne suis pas du tout surpris que votre commande ne fonctionne pas – il y a tellement de choses qui peuvent mal tourner.
Deuxièmement, il est difficile de savoir avec certitude quel shell est réellement exécuté sur Windows ou quelles sont les premières modifications apscopes par Perl. Sur Unix, peu importe – chaque shell fait plus ou moins la même chose avec des commandes simples. Mais sous Windows, vous pouvez exécuter brut CMD.EXE, GNU Bash ou un programme intermédiaire offrant un comportement de type shell Unix. Et comme il existe plusieurs ports différents de Perl vers Windows, cela pourrait bien changer si vous changez de mode.
Mais si vous utilisez le tableau, tout rest en Perl et rien d’autre ne se produit sous le capot.
Au fait, la documentation pour system () et $? peut être trouvé ici et ici . Cela vaut la peine de lire.