PHP生成二维码关键是选库、引文件、传参三步;phpqrcode需同时引入qrlib.php和qrimg.php,中文须转GB2312编码,加logo或改色推荐改用endroid/qr-code库。
直接上手比学原理快得多。PHP生成二维码不是算法题,是调库+调参+避坑的事。选对库、引对文件、传对参数,三步就能跑出图;卡住的90%问题都出在这三步里。
require_once 报 Class 'QRcode' not found 怎么办
这是新手第一道坎,本质是类没加载进来,不是库没装好。
php
qrcode 不需要 Composer 安装,但必须同时引入两个文件:
和
(后者依赖前者)。只引一个就会报这个错。
必须按顺序写:
,再
路径写错不会报致命错误,而是静默失败——用
检查路径是否真实存在
如果项目已用 Composer,别硬塞 phpqrcode,改用
,它自动注册类,不会出现这类加载问题
中文显示方块或问号怎么修复
phpqrcode 原生不支持 UTF-8,不是字体或浏览器问题,是编码层就断了。直接传中文字符串,底层会当乱码处理。
正确做法:用
或
预转码
别用
——它只把 Latin-1 字符升为 UTF-8,对中文完全无效
如果内容含 emoji 或生僻字,GB2312 也撑不住,这时建议换
,它原生支持 UTF-8,无需手动转码
QRcode::png() 参数顺序和默认值容易搞混
函数签名是
,第 2–5 个参数全带默认值,但新手常把
(模块像素大小)和
(白边模块数)记反。
理论可行,但手机扫码大概率失败;
是较稳妥的起点
会导致微信/支付宝识别失败——它们强制要求至少 4 个模块宽度的空白边
容错级别
推荐用
(默认),内容短时选
反而让图案过密、识别率下降
想加 logo 或改颜色,phpqrcode 能不能直接做
不能。phpqrcode 本身只负责生成纯二维码图像,logo 是靠 GD 库二次合成的额外操作,需要自己写
等逻辑,容易出尺寸错位、透明通道丢失等问题。
如果必须加 logo,推荐直接切到
,用
一行搞定,比例自动适配
改前景/背景色在 phpqrcode 里要动源码或另起 GD 操作;而
提供
这种直观接口
复杂样式需求(SVG 输出、缓存、标签文字)基本只能靠现代库支撑,phpqrcode 的设计目标就是“能用”,不是“好看”或“灵活”
真正卡住人的地方,往往不是“怎么生成”,而是“为什么生成了却扫不出”——白边不够、模块太小、中文没转码、输出前有空格,这些细节不验证就上线,调试成本远高于换库重写。
PHP 8.5.5
PHP 8.5.5 是 PHP 8.5 分支的维护更新版本。该版本延续了“小步快跑”的迭代逻辑,通过深度错误修复、底层性能微调以及安全加固,旨在为开发者提供一个更健壮、更高效的运行环境。该版本严格遵守语义化版本规范,不包含破坏性变更。
下载
qrlib.phpqrimg.phprequire_once 'qrlib.php';require_once 'qrimg.php';file_exists()endroid/qr-codeiconv('UTF-8', 'GB2312//IGNORE', $text)mb_convert_encoding($text, 'GB2312', 'UTF-8')utf8_encode()endroid/qr-codeQRcode::png($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4)$size$margin$size = 1$size = 4$margin = 0$levelQR_ECLEVEL_MHimagecopyresized()endroid/qr-code->merge('logo.png', .15)endroid/qr-code->color(0, 0, 0)->backgroundColor(255, 255, 255)