0

我正在使用 shell_exec() 使用以下 PHP 代码(全部在一行上)通过 Adob​​e Reader 将存储在 LAN 上的 PDF 自动打印到 LAN 上的打印机:

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 脚本似乎永远不会完成。我好糊涂...

4

1 回答 1

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_exec("'C:\\Program Files\\Adobe\\Reader 10.0\\Reader\\AcroRd32.exe' 
    /t \\\\hnurensp01\\RepairTickets\\179694.pdf \\\\hnurenfp01\\Accounts_FS-1128MFP");
于 2012-05-02T15:10:13.163 回答