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

能否使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 02:21:22