我正在使用shell_exec()使用以下PHP代码(全部在一行上)通过Adobe Reader将存储在LAN上的PDF自动打印到局域网上的打印机:
shell_exec("'C:\Program Files\Adobe\Reader 10.0\Reader\AcroRd32.exe'
/t \\hnurensp01\RepairTickets\179694.pdf \\hnurenfp01\Accounts_FS-1128MFP");
我期望这样做是打开adobe reader,打开网络上的PDF并打印到网络打印机。使用此行运行PHP脚本时,它不会打开adobe reader或打印它。但是,当我复制该代码并在命令提示符(客户端)中执行时,它可以工作并打印。命令行只有轻微的修改(全部在一行):
"C:\Program Files\Adobe\Reader 10.0\Reader\AcroRd32.exe"
/t \\hnurensp01\RepairTickets\179694.pdf \\hnurenfp01\Accounts_FS-1128MFP
是否与在服务器端执行的PHP脚本有关?我已经尝试在服务器上运行相同的命令行,它也可以工作。它似乎只是在通过PHP时,它什么也没做。
我的最终结果必须是打印出服务器端PDF,尽可能少地与最终用户交互。注意:这是一个WAMP环境。
有什么想法吗?
感谢。
更新
尝试将代码放入批处理文件并以这种方式调用它仍然无法正常工作。使用exec()
和shell_exec()
尝试但仍然没有快乐。出于某种原因,当我通过双击运行批处理文件时,它工作正常。当我用PHP调用它时,它除了打开两个没有关闭的acrord32.exe实例之外什么都不做,因此PHP脚本似乎永远不会完成。我很困惑......
答案 0 :(得分:0)
试试这个:
echo "'C:\Program Files\Adobe\Reader 10.0\Reader\AcroRd32.exe' /t \\hnurensp01\RepairTickets\179694.pdf \\hnurenfp01\Accounts_FS-1128MFP"
它返回:
'C:\Program Files\Adobe\Reader 10.0\Reader\AcroRd32.exe' /t \hnurensp01\RepairTickets9694.pdf \hnurenfp01\Accounts_FS-1128MFP
在PHP中,反斜杠用作“特殊”字符,因为它用于生成标签和换行符\t
和\n
。逃避反斜杠的正确方法是先添加另一个:\\
生成\
作为输出。
这就是您的PHP脚本不起作用的原因。双反斜杠将打印到shell,就像您只键入一个!您将需要在该行代码中转义每个反斜杠:
shell_exec("'C:\\Program Files\\Adobe\\Reader 10.0\\Reader\\AcroRd32.exe'
/t \\\\hnurensp01\\RepairTickets\\179694.pdf \\\\hnurenfp01\\Accounts_FS-1128MFP");