Constant QR_MODE_NUL already defined 错误解决办法

在使用dh2y\qrcode扩展包开发生成二维码过程中,我们可能遇到错误 Constant QR_MODE_NUL already defined ,这个错误翻译为中文就是常量早已被定义使用了。但是在使用过程中,可以很明确的是我们没有定义常量,但是报错是在我们循环调用该扩展批量生成二维码时候才会产生这个错误。所以,我们要解决的就是重复实例化扩展包的问题。在网上也能查到资料,我搜到的资料,大佬们都是说把实例化扩展包的哪一行命令放在循环的外面去执行,我在使用过程中感觉这个方法解决的不够彻底,特此记录下我的解决办法。

1.首先粘贴错误代码

php 复制代码
<?php
namespace app\controller;

use app\BaseController;
use dh2y\qrcode\QRcode;


class Qrcodedemo extends BaseController
{

    public function index()
    {
        // $this->qrcode();    // 单独调用不出错,正常生成二维码
        // 循环调用报错 Constant QR_MODE_NUL already defined
        for ($i = 0; $i <=10;$i++) {
            $this->qrcode();
            echo "$i" ;
        }

    }
    public function qrcode()        // 该方法对应的是报错的 循环$i 调用
    {
        $code = new QRcode();
        $uploadPath = public_path("uploads/" . date('Ymd'));
        if (!is_dir($uploadPath)) {
            mkdir($uploadPath, 0777, true);
        }
           //生成二维码
        $code_path = $code->png('123456789',"uploads/".date('Ymd').'/'.time().'.png',10)     
        ->logo('static/800.png')         //生成logo二维码
        ->getPath();                                //获取二维码生成的地址
        return $code_path;
    }
}

以上代码运行就会报错:# Constant QR_MODE_NUL already defined

2.正确的代码

php 复制代码
<?php
namespace app\controller;

use app\BaseController;
use dh2y\qrcode\QRcode;

class Index extends BaseController
{
    private $qrcode;
    public function __construct()
    {
        $this->qrcodeList = new QRcode();
    }

    public function index()
    {
        for ($j = 0; $j <=10;$j++) {
            $this->qrcodetwo();
            echo "$j" ;
        }

    }
    public function qrcodetwo()        // 该方法对应的是报错的 循环$i 调用
    {

        $uploadPath = public_path("uploads/" . date('Ymd'));
        if (!is_dir($uploadPath)) {
            mkdir($uploadPath, 0777, true);
        }
        $code_path = $this->qrcodeList->png('123456789',"uploads/".date('Ymd').'/'.time().'.png',10)        //生成二维码
        ->logo('static/800.png')         //生成logo二维码
        ->getPath();                                //获取二维码生成的地址
        return $code_path;
    }
}

通过以上两段代码,我想大家能够看到差别,错误的方法是在循环中不断的new 实例化二维码生成扩展包,为了避免这个问题产生,就使用了系统虚构函数初始化方法,这样在每次去循环的时候,相当于只调用了一次初始化的方法,就避免了二维码生成扩展包重复加载,实例化报错的问题了。如果使用了正确的方法仍然报错的话,那么你还需要修改一点,就是在use扩展包的时候定义一个别名,就可以解决报错问题了。(定义别名后,记得调用也要适当的修改)

php 复制代码
use dh2y\qrcode\QRcode as QrCodeLibrary;   // 定义别名 引用二维码生成 扩展包

以上就是在使用二维码扩展包,批量生成图片的错误解决办法。希望对朋友们有帮助。 原创不易,未授权,禁止转载!

相关推荐
前端小张同学11 小时前
服务器部署 gitlab 占用空间太大怎么办,优化思路。
后端
databook12 小时前
Manim实现闪光轨迹特效
后端·python·动效
武子康12 小时前
大数据-98 Spark 从 DStream 到 Structured Streaming:Spark 实时计算的演进
大数据·后端·spark
该用户已不存在13 小时前
6个值得收藏的.NET ORM 框架
前端·后端·.net
文心快码BaiduComate13 小时前
文心快码入选2025服贸会“数智影响力”先锋案例
前端·后端·程序员
neoooo13 小时前
🌐 Cloudflare Tunnel vs ZeroTier:两个世界的内网穿透哲学
后端
涡能增压发动积13 小时前
当你不了解“异步”时请慎用“异步”——记一次生产环境故障排查之旅
后端
文心快码BaiduComate13 小时前
用Comate Zulu开发一款微信小程序
前端·后端·微信小程序
用户83562907805113 小时前
Python 删除 Excel 工作表中的空白行列
后端·python
Json_13 小时前
使用python-fastApi框架开发一个学校宿舍管理系统-前后端分离项目
后端·python·fastapi