Windows中的PHP shell_exec不写入LPT1

时间:2014-06-20 20:35:55

标签: php windows apache permissions shell-exec

我将从linux写入的一小段代码移植到Windows,我基本上需要将ZPL代码推送到通过usb连接的斑马打印机。在linux中没有shell_exec和lp的问题。

在Windows上,我将usb打印机映射到LPT1,这里没有问题,如果我将代码(或复制文件)回显到LPT1(在cmd中),一切正常。像:

copy C:\zplcode.txt LPT1 *or* echo "zplcode here" > LPT1

我的东西被打印出来了。

现在,就像我说的那样在cmd中完美无缺,但是如果我shell_exec这个,它就不起作用了。我认为shell_exec根本不起作用,但确实如此。实际上,echo shell_exec('ver')会返回我的Windows版本。并且copy C:\zplcode.txt LPT1返回" 1个文件被复制"在cmd中,echo shell_exec('copy c:\zplcode.txt LPT1')返回" 0个文件被复制"。如果我尝试复制任何普通文件或回显它们,也会发生这种情况。

就像apache没有写权限或者其他东西一样,它仍然不像linux上有自己的用户,它是作为系统运行的服务......你能帮我吗?感谢

edit2:我通过禁用UAC并强制apache服务以管理员身份运行来解决我的问题,然后执行shell_exec("echo zplcode here > ///localhost//printer"),其中printer是我在共享时分配给我的打印机的名称。我想问题仍然存在,因为如果我需要的话,我无法将数据推送到LPT1(除非分享并做我在这里做的事情)。

1 个答案:

答案 0 :(得分:1)

你说你“将USB打印机映射到LPT1”;这样的映射是用户登录会话的本地(或者可能是远程桌面会话,我不确定)。

即使配置为在同一用户帐户下运行,服务也不会看到它。每个服务都有一个单独的登录会话,从Windows Vista开始,only services run in Remote Desktop session 0