endroid/qr-code生成二维码报错

使用依赖库endroid/qr-code 生成二维码 报错提示语法解析错误: syntax error, unexpected 'string' (T_STRING), expecting function (T_FUNCTION) or const (T_CONST)

目录

环境

问题

解决

命令

安装fpdf

创建二维码

设置二维码logo

总结


环境

Fastadmin

PHP 7.4.3

endroid/qr-code 4.6

问题

直接在项目根目录命令行中使用composer安装依赖库后。

使用依赖库endroid/qr-code 生成二维码 报错提示语法解析错误: syntax error, unexpected 'string' (T_STRING), expecting function (T_FUNCTION) or const (T_CONST)

但是另一个项目同样的环境和配置,就可以使用。

解决

排查语法和依赖包都没有发现问题。

搜索有提示说php环境不兼容,最终采用降低版本。

命令

bash 复制代码
# 卸载现有版本
composer remove endroid/qr-code

# 安装兼容 PHP 7 的 3.x 版本
composer require endroid/qr-code:^3.9

安装fpdf

改成使用3.9版本时 提示The Fpdf writer requires FPDF as dependency but the class "\FPDF" couldn't be found.

endroid/qr-code 3.9 版本的 FpdfWriter(PDF 格式二维码生成)依赖 FPDF 类,但你当前环境缺少这个依赖库.

命令如下:

bash 复制代码
# 安装FPDF(适配3.9版本的兼容版本)
composer require setasign/fpdf:^1.8

创建二维码

开始创建二维码,传入字符串参数。代码如下:

php 复制代码
/**
 * 创建用户账号二维码
 * @return string
 * @throws \Exception
 */
public function createUserQrCode()
{
    $user = User::getById($this->_user->id);
    if ($user->qr_code) {
        return $user->qr_code;
    }

    // 1. 初始化二维码对象(3.x 版本语法)
    $qrCode = new \Endroid\QrCode\QrCode($user['username']);

    // 2. 配置二维码参数(3.x 版本方法)
    $qrCode->setSize(300);
    $qrCode->setMargin(10);

    // 3. 生成二维码(3.x 版本写法)
    $qrCode->setWriter(new \Endroid\QrCode\Writer\PngWriter());
    $qrCodeData = $qrCode->writeString();

    // 4. 创建文件夹
    $qr_path = './uploads/qrcode';
    if (!is_dir($qr_path)) {
        @mkdir($qr_path, 0755, true);
    }

    // 5. 保存二维码文件
    $filePath = $qr_path . '/qr_' . $this->_user->id . '.png';
    file_put_contents($filePath, $qrCodeData);

    // 6. 更新用户二维码字段
    $user->qr_code = $filePath;
    $user->save();

    return $filePath;
}

最后生成正常

logo路径需要是绝对路径。

代码如下:

php 复制代码
// 设置logo
$qrCode->setLogoSize(60, 60);
$qrCode->setLogoPath(local_url($user['avatar']));

还可以设置背景颜色比较简单不做演示了。

总结

在使用endroid/qr-code 生成二维码报错及解决处理的笔记

相关推荐
码农老李1 小时前
openEuler2403服务器版 原生官方镜像和飞腾定制镜像
开发语言·php
审判长烧鸡4 小时前
【PHPer转Go】fmt vs log/slog
go·php
HMS工业网络6 小时前
STP、RSTP到N-Ring的演进之路
服务器·开发语言·php
qq_543447827 小时前
Tcping测速是什么?Tcping测速核心概念解析
服务器·网络·php
Mr数据杨10 小时前
AIGC工具平台-StoryBoard故事板
人工智能·aigc·php
IronMurphy10 小时前
Redis拷打第七讲(最终章)
数据库·redis·php
marsh020612 小时前
49 openclaw故障排查:系统异常时的诊断方法
服务器·前端·青少年编程·ai·php·技术美术
暗冰ཏོ14 小时前
PHP 全栈开发学习手册:从基础到高级实战、Laravel、Redis、面试题完整版
学习·php·laravel
dog2501 天前
为何新增网络路径反而引入额外时延
服务器·网络·php