使用依赖库endroid/qr-code 生成二维码 报错提示语法解析错误: syntax error, unexpected 'string' (T_STRING), expecting function (T_FUNCTION) or const (T_CONST)
目录
环境
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
logo路径需要是绝对路径。
代码如下:
php
// 设置logo
$qrCode->setLogoSize(60, 60);
$qrCode->setLogoPath(local_url($user['avatar']));
还可以设置背景颜色比较简单不做演示了。
总结
在使用endroid/qr-code 生成二维码报错及解决处理的笔记