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

ESC POS PHP库通过SMB协议连接USB共享打印机失败问题

Windows 10 Web服务器无法访问Windows 7共享POS打印机的问题解决

问题场景

我有一台搭载XAMPP的Windows 10 Web服务器,另一台Windows 7客户端电脑连接了POS-58系列热敏打印机并已共享。当从Windows 7访问Web应用时,打印功能无法正常工作;但将两台电脑角色互换(Windows 7作为Web服务器)时,打印完全正常。使用Mike42的ESC-POS库编写的PHP代码如下:

require 'escpos/src/Mike42/Escpos/Printer.php';
require 'escpos/src/Mike42/Escpos/PrintConnectors/PrintConnector.php';
require 'escpos/src/Mike42/Escpos/PrintConnectors/WindowsPrintConnector.php';
require 'escpos/src/Mike42/Escpos/CapabilityProfile.php';
require 'escpos/src/Mike42/Escpos/CodePage.php';
require 'escpos/src/Mike42/Escpos/PrintBuffers/PrintBuffer.php';
require 'escpos/src/Mike42/Escpos/PrintBuffers/EscposPrintBuffer.php';

use Mike42\Escpos\Printer;
use Mike42\Escpos\PrintConnectors\WindowsPrintConnector;

$connector = new WindowsPrintConnector("smb://Armando-PC/pos1"); // 共享打印机所在的电脑

// 初始化打印机
$printer = new Printer($connector);

$printer->text("\n");
$printer->cut(); 
$printer->close(); 

问题根源

核心原因是Windows 10上的Apache服务默认运行账户(Local System)没有访问Windows 7共享打印机的权限。Local System账户仅拥有本地系统权限,无法跨设备访问网络共享资源;而Windows 7的系统权限策略相对宽松,或其Apache服务运行账户本身具备跨设备访问权限,因此互换角色后打印正常。

解决步骤

1. 修改Apache服务的运行账户

  1. 按Win+R输入services.msc打开「服务」管理器
  2. 找到XAMPP对应的Apache服务(通常名为Apache2.4),右键选择「属性」
  3. 切换到「登录」选项卡,选择「此账户」,输入一个在Windows 7上拥有共享打印机访问权限的账户(优先选择两台电脑共有的域账户,或Windows 7的本地管理员账户)
  4. 输入该账户的密码,点击「应用」「确定」,重启Apache服务

2. 验证Windows 7共享打印机的权限

  1. 在Windows 7上右键共享的POS打印机,选择「打印机属性」
  2. 切换到「安全」选项卡,确认上述Apache运行账户已被授予「打印」权限
  3. 切换到「共享」选项卡,确认「共享这台打印机」已勾选,且共享名与代码中的pos1完全一致

3. 调整PHP连接字符串(可选,用于本地账户验证)

如果使用Windows 7本地账户访问共享,可在连接字符串中明确指定账户和密码,避免权限验证失败:

require 'escpos/src/Mike42/Escpos/Printer.php';
require 'escpos/src/Mike42/Escpos/PrintConnectors/PrintConnector.php';
require 'escpos/src/Mike42/Escpos/PrintConnectors/WindowsPrintConnector.php';
require 'escpos/src/Mike42/Escpos/CapabilityProfile.php';
require 'escpos/src/Mike42/Escpos/CodePage.php';
require 'escpos/src/Mike42/Escpos/PrintBuffers/PrintBuffer.php';
require 'escpos/src/Mike42/Escpos/PrintBuffers/EscposPrintBuffer.php';

use Mike42\Escpos\Printer;
use Mike42\Escpos\PrintConnectors\WindowsPrintConnector;

// 格式:smb://用户名:密码@电脑名称/共享打印机名
$connector = new WindowsPrintConnector("smb://Win7用户名:Win7密码@Armando-PC/pos1"); 

$printer = new Printer($connector);
$printer->text("\n");
$printer->cut(); 
$printer->close(); 

额外检查项

  • 确保Windows 10和Windows 7处于同一工作组或域中
  • 关闭两台电脑的防火墙(或添加Apache服务、SMB协议的允许规则)
  • 在Windows 10上手动访问\\Armando-PC\pos1,确认能正常打开打印机,排除网络或共享本身的问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 08:38:11