1
ijimmy 2018-06-23 10:32:37 +08:00 via iPhone
Python 写个接口调用不是更好?
|
2
feiyuanqiu 2018-06-23 10:44:35 +08:00
看看这个会不会有什么帮助 http://php.net/manual/en/function.exec.php#101837
|
4
qiayue 2018-06-23 10:51:13 +08:00
可能是 php 配置里禁止了 exec 执行
|
5
zjfeng18 OP @feiyuanqiu exec 是能执行的,pg_print.py 中部分代码也执行了,我打印前先将 html 转 pdf 的,这一步成功的,就是调用 win32api.ShellExecute(0,'print',self.pdf_file_name,win32print.GetDefaultPrinterW(),".", 0)打印 pdf 时,没有反应
|
6
ijimmy 2018-06-23 11:01:32 +08:00 via iPhone
Python 不太熟悉,不过可以用 flask 或 django 之类的框架写一个 Web 服务,然后用 PHP 调用就可以了啊
|
8
PHPJit 2018-06-23 11:18:31 +08:00
php 执行 python 是 www 权限,是不是权限的原因哦。
|
9
PHPJit 2018-06-23 11:19:39 +08:00
你用 root 权限 cli 模式运行 php 试一下
|
10
zjfeng18 OP 好像,通过 php 调用 python 执行 win32api.ShellExecute 都不能执行
|
11
feiyuanqiu 2018-06-23 11:29:51 +08:00
@zjfeng18 你这里是 php 通过 cmd 调用 python,python 再通过 cmd 调用 print,如果 win32api.ShellExecute 实在调不通的话,可以试试直接用 php 调用 print:
shell_exec( 'print /d:"EPSON MFC-J265W" c:\file.txt'); 获取默认的打印机需要用到一个 pecl 包 https://pecl.php.net/package/printer 里面的 printer_list() 函数 $printers = printer_list ( PRINTER_ENUM_DEFAULT ); |
12
zjfeng18 OP @PHPJit 大神,在你的提醒下,我在 cmd 下执行 php,发现能正常提交打印,我是 win2008 服务器,通过 cmd 执行时使用的是当前用户操作的,使用 web 执行时是 system 用户
|
13
zjfeng18 OP @feiyuanqiu 这种方式不能打印?不知为什么
|
15
feiyuanqiu 2018-06-23 11:57:24 +08:00
@zjfeng18 权限问题上面给的那个链接有个设置方法,可以试试看
To make it work I just followed the next steps: - execute services.msc and find the apache service (In my case wampapache) - Right button>Log On tab and change from Local System Account to a user created account, enter the username and the password and restart the service. |
16
Foolt 2018-06-23 13:30:58 +08:00
思路不对,应该通过 Web 服务器软件分开调度,而不是通过 PHP 脚本去调用。
正确的做法是 PHP 鉴权后,跳转到一个授权目录链接,Web 服务器软件(如 Nginx )把授权目录链接全部调给到 Python 处理并返回结果,而不通过 PHP 程序。或者干脆用 Python 搭建一个 Web 服务。 你直接用 PHP exec,浪费服务器资源不说,而且容易崩。 |
19
zjfeng18 OP @feiyuanqiu 兄弟这个权限要设备弄知道吗?急呀
|
20
zjfeng18 OP 还没搞定!!
|
21
loveyu 2018-06-23 19:01:59 +08:00
正确的思路可能是这样的,你先用 Python 开启一个 RPC 服务,然后 PHP 调用该 Python 的 RPC 服务, 接着 PHP 就可以直接返回了,然后 Python 在收到打印请求后开始打印。
总之,PHP cli 与 Web 里面运行时有些差异,特别时这几个命令的调用。 |