qrcode.php 是织梦DedeCMS内置的一个生成二维码的PHP脚本,它通常位于 /include/ 目录下,利用了当时流行的 PHP QR Code 库,这个功能非常实用,可以让你在模板中非常方便地生成各种内容的二维码。

第一步:确认文件是否存在
请确认你的织梦程序根目录下的 /include/ 文件夹中是否存在 qrcode.php 文件,如果找不到,说明你的版本可能没有包含此文件,或者文件丢失了,你可以从官方DedeCMS的最新版本中重新拷贝一份过来。
第二步:理解其工作原理
qrcode.php 本身不能直接在浏览器中访问使用,它是一个被其他PHP文件(通常是模板文件)通过 require 或 include 方式引入并调用的功能类。
它的核心工作流程是:
- 引入文件:在你的PHP模板文件中,引入
qrcode.php。 - 实例化对象:创建一个
QRcode类的对象。 - 调用方法:使用该对象的
png()方法来生成二维码图片。 - 传递参数:向
png()方法传递两个关键参数:text: 你要编码进二维码的文本内容(比如一个网址、一段文字)。outfile: 生成的图片文件的保存路径。
第三步:实际使用场景(附代码示例)
最常用的场景就是在内容页模板中,为当前文章生成一个二维码,方便用户扫码阅读。

假设我们要修改文章详情页模板 article_article.htm。
示例1:在文章详情页生成文章链接的二维码
-
打开模板文件 找到并打开
/templets/default/article_article.htm文件。 -
引入并调用二维码生成代码 在你希望显示二维码的位置(比如文章内容下方、作者信息旁边等),添加以下PHP代码:
<div style="margin-top: 20px; text-align: center;"> <p>扫描二维码,阅读本文</p> <?php // 1. 引入qrcode.php文件 // dirname(__FILE__) 是获取当前文件所在目录的绝对路径 require_once(dirname(__FILE__) . "/../include/qrcode.php"); // 2. 获取当前文章的链接 // $arcurl 是一个在织梦文章页模板中预定义的变量,代表当前文章的URL $url = $arcurl; // 3. 定义要生成的二维码图片的保存路径和文件名 // $cfg_cmspath 是网站根目录 // $cfg_basedir 是附件上传目录,用来存放生成的图片,避免与模板文件混淆 // date('YmdHis') 确保文件名唯一,避免覆盖 $filename = $cfg_cmspath . '/uploads/qrcode/' . date('YmdHis') . '.png'; // 4. 检查并创建上传目录(如果不存在) if (!is_dir($cfg_cmspath . '/uploads/qrcode/')) { mkdir($cfg_cmspath . '/uploads/qrcode/', 0777, true); } // 5. 实例化QRcode对象并生成二维码 // new QRcode() 是创建一个QRcode类的实例 // ->png() 是调用生成PNG格式图片的方法 QRcode::png($url, $filename, 'L', 8, 2); // 6. 显示刚刚生成的二维码图片 // basename() 函数只获取文件名,如 '20251027103000.png' echo '<img src="/uploads/qrcode/' . basename($filename) . '" alt="文章二维码" />'; ?> </div> -
代码解释
(图片来源网络,侵删)require_once(...): 必须包含的步骤,告诉PHP去加载二维码生成的核心功能。$url = $arcurl;: 获取当前文章的完整URL,这是二维码要包含的核心信息。$filename = ...;: 定义二维码图片的服务器上的保存路径,强烈建议不要保存在模板目录,而是放在类似/uploads/的用户数据目录下。mkdir(...): 一个健壮的代码会检查目录是否存在,如果不存在就创建它。QRcode::png(...): 核心调用。$url: 要编码的数据。$filename: 输出的文件路径,如果设置为false或 ,则会直接输出图片到浏览器(不推荐,因为无法控制和管理图片)。'L': 纠错级别,可选 'L', 'M', 'Q', 'H',L最低,H最高,纠错级别越高,二维码越复杂,但即使部分损坏也能被识别,通常用 'M' 或 'L' 即可。8: 二维码尺寸,数值越大,生成的二维码图片尺寸越大。2: 边距大小,二维码周围的空白边距。
echo '<img ... />': 在页面上显示生成的二维码图片,这里的src属性是图片的访问URL,要和$filename的服务器路径相对应。
第四步:高级用法与常见问题
生成其他内容的二维码
你不仅可以生成文章链接,还可以生成任何文本内容,
-
生成带参数的链接:
$url = $arcurl . '&from=qrcode'; // 在链接后附加参数
-
生成纯文本信息:
$text = "欢迎访问织梦DedeCMS官方网站!"; QRcode::png($text, $filename);
-
生成联系人的vCard信息:
$vcard = "BEGIN:VCARD\nVERSION:3.0\nN:张三\nFN:张三\nTEL:13800138000\nEMAIL:zhangsan@example.com\nEND:VCARD"; QRcode::png($vcard, $filename);
常见问题排查
-
问题1:
Fatal error: Class 'QRcode' not found- 原因:
require_once路径错误,或者qrcode.php文件本身不存在或损坏。 - 解决:请仔细检查
require_once的路径是否正确,确保qrcode.php文件在/include/目录下。
- 原因:
-
问题2:生成的二维码图片无法显示(显示破碎图标或空白)
- 原因:
- 图片路径/URL错误,服务器上的文件路径和网页中访问的URL不匹配。
- 目录没有写入权限。
/uploads/qrcode/目录可能不存在,或者没有写入权限。 - PHP环境缺少GD库。
qrcode.php依赖于GD库来生成图片。
- 解决:
- 检查
$filename和<img src="...">的路径是否正确。 - 通过FTP或服务器管理工具,给
/uploads/目录(或你指定的目录)赋予755或777的权限(生产环境建议使用755)。 - 联系你的服务器商,确认PHP环境已开启GD库,可以通过
phpinfo()函数来检查。
- 检查
- 原因:
-
问题3:二维码太复杂,扫描不了
- 原因:编码的文本内容过长,或者纠错级别设置过高,导致二维码矩阵过于密集。
- 解决:
- 尽量缩短要编码的URL,可以使用短链接服务。
- 降低纠错级别,比如从
'H'改为'L'。 - 增大二维码尺寸,比如将
8改为10或12。
第五步:更现代的替代方案(可选)
虽然 qrcode.php 很方便,但它使用的库可能不是最新的,如果你追求更高的生成速度、更小的体积或更丰富的功能(比如生成带Logo的二维码),可以考虑使用更现代的PHP库,
- endroid/qr-code: 一个非常流行且功能强大的Composer包。
- BaconQrCode: 另一个高性能的库。
使用这些库通常需要通过Composer来管理项目,对于不熟悉Composer的用户来说,直接使用织梦自带的 qrcode.php 是最简单快捷的选择。
| 步骤 | 操作 | 关键代码/说明 |
|---|---|---|
| 准备 | 确认 /include/qrcode.php 文件存在。 |
|
| 引入 | 在模板文件中引入该文件。 | require_once(dirname(__FILE__) . "/../include/qrcode.php"); |
| 确定要生成二维码的文本。 | $url = $arcurl; |
|
| 定义路径 | 设定图片在服务器上的保存路径。 | $filename = $cfg_cmspath . '/uploads/qrcode/...'; |
| 生成 | 调用 QRcode::png() 方法生成图片。 |
QRcode::png($url, $filename, 'L', 8, 2); |
| 显示 | 在页面中用 <img> 标签显示二维码。 |
<img src="/uploads/qrcode/..." /> |
按照以上步骤,你就可以在织梦DedeCMS的任何模板中灵活地使用二维码功能了。
