推荐使用 bacon/bacon-qr-code 库生成二维码,支持 PNG/SVG 格式、可调容错等级与尺寸,需启用 GD 扩展(PNG)并确保输入为 UTF-8 编码。

bacon/bacon-qr-code(官方维护、无依赖、支持 PHP 7.4+),它比老旧的 phpqrcode 更安全、更易维护。
安装 bacon/bacon-qr-code 库
用 Composer 安装是最标准的方式,避免手动引入和 autoloader 冲突:
- 确保项目根目录有
composer.json,且已配置好 Composer 环境 - 运行命令:
composer require bacon/bacon-qr-code
- 如果报错
ext-gd not found,说明 GD 扩展未启用 —— 需在php.ini中取消;extension=gd的注释,并重启 Web 服务(如 Apache/Nginx + PHP-FPM)
生成 PNG 格式二维码(最常用场景)
直接输出 PNG 图片流适合前端 这类动态调用:
writeString('https://example.com');
?>
-
RendererStyle(300)控制宽高;传第二个参数可设 margin(如new RendererStyle(300, 10)) - 不加
header()直接 echo 会导致乱码或下载失败 - 若需保存文件,把
echo $writer->writeString(...)换成file_put_contents('qrcode.png', $writer->writeString(...))
生成 SVG 格式二维码(适合响应式页面)
SVG 无损缩放,嵌入 HTML 更灵活,且不依赖 GD 扩展:
bee餐饮点餐外卖小程序是针对餐饮行业推出的一套完整的餐饮解决方案,实现了用户在线点餐下单、外卖、叫号排队、支付、配送等功能,完美的使餐饮行业更高效便捷!功能演示:1、桌号管理登录后台,左侧菜单 “桌号管理”,添加并管理你的桌号信息,添加以后在列表你将可以看到 ID 和 密钥,这两个数据用来生成桌子的二维码2、生成桌子二维码例如上面的ID为 308,密钥为 d3PiIY,那么现在去左侧菜单微信设置
writeString('Hello World');
?>
-
Svg渲染器不依赖 GD,适合容器化部署或 GD 被禁用的环境 - 生成的 SVG 是纯文本,可直接内联到 HTML 中(去掉
header,用echo插入)- 注意:部分旧版 IE 不支持 inline SVG,生产环境需确认兼容范围
常见错误与绕过技巧
实际集成时容易卡在这几个点上:
立即学习“PHP免费学习笔记(深入)”;
- 报错
Class 'BaconQrCode\Writer' not found:没执行composer install或自动加载失效,运行composer dump-autoload - 中文内容乱码/无法识别:QR 码本身不处理编码,必须保证输入字符串是 UTF-8。例如从数据库读取后做
mb_convert_encoding($str, 'UTF-8', 'GBK') - 二维码内容超长导致扫描失败:默认容错等级是
L(约 7% 恢复能力)。可提升为M(15%)、Q(25%)或H(30%),用new RendererStyle(300, 0, null, null, null, \BaconQrCode\Encoder\ErrorCorrectionLevel::M()) - 想加 logo?这个库原生不支持。得先生成二维码 PNG,再用 GD 函数(
imagecopyresized)叠加图片 —— 注意别遮挡定位图案(三个角上的方块)










