我正在尝试通过PHP打印生成的表单/收据(打印机将安装在服务器上,我不会尝试打印到用户的本地打印机)。我决定尝试以下方法:
在PHP中:
IN perl:
system()
“打开”Reader并静默打印给定的PDF。什么有效:
printf
等功能似乎可以正常工作,因为输出显示在浏览器中。什么行不通:
system('"C:\\Program Files (x86)\\Adobe\\Reader 10.0\\Reader\\AcroRd32.exe" /N /T "C:\\test.pdf" 0-XEROX');
会发生什么:
我尝试了什么:
Everyone - Full Control
。$?
电话后输出system()
。它是1
,但我不知道1
在这种情况下的含义。disable_functions
(虽然我认为这是无关的,因为shell_exec
似乎正在运行,因为某些perl代码已经运行了。)system()
调用。其他信息:
我在这里不知所措,虽然看起来这是一个Apache /权限问题,但我无法确定。我对Apache的经验是有限的,我在网上发现的大部分内容都是在我的环境中不起作用的linux命令。
答案 0 :(得分:1)
试试这个:
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";
}
关于system()的事情是它做了两件不同的事情 取决于它得到的参数的数量和类型。如果 参数是一个数组,或者如果有多个参数,Perl假定 第一个是以其余为参数运行的程序 启动程序本身。
但是,如果它只是一个字符串,Perl处理它的方式不同。它 在Windows上运行命令行解释器(通常是Windows上的CMD.EXE) 字符串,让它做它想要的东西。这变成了 问题非常快。
首先,Perl和shell都会进行各种插值 字符串(例如用'/'替换'//',用空格标记,等等)和 很容易忘记什么是什么。我根本不是 惊讶于你的命令不起作用 - 有这么多 可能出错的事情。
其次,很难确定实际运行的shell是什么 Windows或Perl首先对其进行了哪些更改。在Unix上,它通常无关紧要 - 每个shell都做更多或更多 简单的命令不太相同。但在Windows上,你可能会 运行原始CMD.EXE,GNU Bash或一些中间程序 提供类似Unix-shell的行为。而且因为有几个 Perl到Windows的不同端口,如果你可以改变它 开关。
但是如果你使用数组形式,它都保留在Perl中,而不是其他任何东西 发生在引擎盖下。