You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows环境下PHP-Apache如何向网络共享打印机发送PDF文件?

问题:SYSTEM账户下Apache/PHP无法访问网络共享打印机

基础信息

  • 网络共享打印机路径:\\192.168.0.100\Gprinter GP-3120TL
  • 运行环境:Apache 2.4、Windows(IP:192.168.0.99)、PHP 8.3
  • 手动验证:通过WIN+R打开\\192.168.0.100,输入账号密码后双击打印机可自动下载并安装驱动,正常使用

已尝试的优化与代码

  1. 解决PHP执行命令阻塞问题:替换shell_exec()/exec()为后台执行方式:
    pclose(popen("start /B ". $commands, "r"));
    
  2. 解决打印工具GUI残留问题:选用无界面的SumatraPDF.exe,放置于PHP脚本目录
  3. 最终打印代码:
    $printerPath = '\\\\192.168.0.100\\Gprinter GP-3120TL';
    $fileToPrint = $_SERVER['DOCUMENT_ROOT'] . "1.pdf";
    $commands = "SumatraPDF.exe -print-to \"$printerPath\" -print-settings landscape \"$fileToPrint\" > C:/SumatraPDFlog.txt 2>&1";
    pclose(popen("start /B ". $commands, "r"));
    

异常现象

  • 把PHP输出的$commands内容复制到本地CMD执行,可正常完成打印
  • PHP脚本执行时失败,查看日志C:/SumatraPDFlog.txt显示:No printer found
  • 打印机列表差异:
    • PHP中执行wmic printer get name仅返回本地虚拟打印机:
      Name
      Microsoft XPS Document Writer
      Microsoft Print to PDF
      Fax
      
    • 本地CMD中执行同一条命令,能正常列出网络共享打印机:
      Name
      Microsoft XPS Document Writer
      Microsoft Print to PDF
      Fax
      \\192.168.0.100\Gprinter GP-3120TL
      

已测试无效的操作

  • 在打印机属性的安全选项卡中添加SYSTEM账户权限
  • 通过printmanagement.msc添加网络打印机
  • 通过gpedit.msc配置添加打印机规则

临时有效方案

将Apache 2.4服务的登录账户从默认SYSTEM改为本地管理员账户后,PHP脚本可正常执行打印操作

疑问

  1. 之前的操作存在哪些错误?
  2. 为何SYSTEM账户无法访问该网络共享打印机?

内容的提问来源于stack exchange,提问作者ioripalm

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 02:48:25