能否使用XAMPP搭建打印服务器 通过PHP实现局域网跨设备打印?
可行性结论
完全可以基于XAMPP搭建目标场景的局域网打印服务器,同时也支持通过PHP代码向直连的USB打印机下发打印任务,不存在原理层面的限制。
基础局域网打印服务搭建步骤
不需要写代码就能先实现局域网内设备直连打印的基础能力,操作流程如下:
- 将USB打印机连接到部署XAMPP的主机,安装对应打印机驱动,先在本地打印测试页,确认主机本身可以正常驱动打印机工作
- 开启打印机的局域网共享权限:Windows系统在打印机属性面板开启共享,配置好局域网访问权限(建议关闭密码保护共享,或单独给打印服务分配固定访问账号);Linux/macOS系统在CUPS管理后台开启打印机共享,开放局域网631端口的访问权限
- 完成以上配置后,同一局域网内的所有设备,都可以通过系统自带的「添加网络打印机」功能搜索到这台共享打印机,直接提交打印任务。
PHP代码触发打印的实现方案
PHP可以直接调用系统能力或专用扩展提交打印任务,注意提前给XAMPP的Apache服务运行账号分配打印机的访问权限,否则会出现权限不足导致任务提交失败的问题,不同系统下的实现方式如下:
Windows环境
- 方式1:使用
printer扩展
下载和当前XAMPP内PHP版本匹配(匹配线程安全/非线程安全、x86/x64版本)的printer扩展dll文件,放到PHP的ext目录下,在php.ini中添加extension=php_printer.dll配置,重启Apache后即可调用扩展函数提交打印任务,核心代码示例:<?php // 校验上传文件合法性,仅允许打印机支持的PDF、图片等格式 $targetFile = $_FILES['print_file']['tmp_name']; // 替换为你自己设置的打印机共享名 $printerHandle = printer_open("\\\\127.0.0.1\\共享打印机名称"); printer_set_option($printerHandle, PRINTER_MODE, "RAW"); printer_start_doc($printerHandle, "Web端提交打印任务"); printer_start_page($printerHandle); printer_write($printerHandle, file_get_contents($targetFile)); printer_end_page($printerHandle); printer_end_doc($printerHandle); printer_close($printerHandle); echo "打印任务已提交至打印机"; ?> - 方式2:直接调用系统打印命令
如果不想安装扩展,可以在确认php.ini的disable_functions中没有禁用exec、shell_exec函数的前提下,直接调用Windows自带的print命令提交任务,示例代码:<?php $targetFile = escapeshellarg($_FILES['print_file']['tmp_name']); $printerName = escapeshellarg("\\127.0.0.1\共享打印机名称"); shell_exec("print /D:{$printerName} {$targetFile}"); ?>
Linux/macOS环境
不需要安装额外扩展,直接调用CUPS自带的lp命令即可提交打印任务,先在终端执行lpstat -p确认打印机名称和CUPS服务状态正常,核心代码示例:
<?php $targetFile = escapeshellarg($_FILES['print_file']['tmp_name']); $printerName = escapeshellarg("你的打印机CUPS名称"); shell_exec("lp -d {$printerName} {$targetFile}"); ?>
常见踩坑提示
- 必须做上传文件校验:严格限制允许打印的文件格式、大小,禁止上传可执行文件、脚本文件,避免服务器被恶意上传的文件入侵
- 90%的打印失败问题都是权限问题:如果任务提交失败,优先检查Apache服务的运行账号是否有打印机访问权限、是否有临时文件目录的读取权限
- 如果需要给局域网设备提供网页端上传打印入口,只需要写好对应的文件上传页面和上述打印逻辑,开放XAMPP的Apache端口(默认80/443)给局域网访问即可,用户打开对应网页上传文件就能触发打印
- 如果出现打印乱码问题,先确认提交的文件格式是当前打印机支持的格式,必要时可以先在服务端把文件转成通用PDF格式再提交打印
内容的提问来源于stack exchange,提问作者bruno vicente
相关产品推荐
相关产品推荐

