动态二维码生成器PHP Dynamic QRcode

news2024/11/17 7:40:55

在这里插入图片描述

什么是 PHP Dynamic QRcode ?

PHP Dynamic QRcode 是一个允许生成和保存动态和静态二维码(QR码)的应用。它具有简洁、响应灵敏且用户友好的设计。其中包含您网站中可能需要的一般功能,如:记录管理(CRUD)、安全身份验证、分页、过滤器。

什么是 Dynamic Qr codes ?

Dynamic Qr codes 具有可修改的目的地 URL。动态二维码的目的地是可以随时更改——即使您的营销材料已经打印出来。这将节省重印成本和精力,并使您能够尽快对活动中的任何更改做出响应。

什么是 Static Qr codes ?

Static Qr codes 有一个固定的目标 URL。静态二维码中编码的信息是固定的。目的地/数据直接存储在二维码图形中(因此,如果要存储更多数据,二维码也会越来越大,并形成更复杂的模式)。因此,无法更改存储的目的地/数据。与任何其他打印材料一样,已经打印的二维码中的任何拼写错误都无法更改。通过本应用,您可以创建 13种不同类型的静态二维码。

这个项目老苏很早就关注了,刚开始没有 Docker 版本,老苏尝试过自己构建镜像,但是在数据库设置完成后有报错。最近看了一下,官方已经提供了 Dockerfile ,但是必须本地编译,而不能从 docker hub 下载。这对大部分人来说,不是一件容易的事情

虽然官方有计划,但是都快过去半年了,还是没有可供下载的镜像,所以只能自己动手,来丰衣足食了。不过老苏水平有限,毕竟不是程序员,一些异常没有代码的配合也不知道如何处理,只能严格按顺序操作了,如果出错了就删了重来吧

结果并不重要,重要的是我们动手折腾了 😂

构建镜像

如果你不想自己构建,可以跳过,直接阅读下一章节

Dockerfile

官方提供了 Dockerfile ,但需要我们自己编。

1、为了加快构建速度,在 RUN apt-get update 之前,插入了下面👇这段,将默认源改为了阿里源

# 改阿里源    
RUN sed -i "s@http://deb.debian.org@http://mirrors.aliyun.com@g" /etc/apt/sources.list    
RUN cat /etc/apt/sources.list    
RUN rm -Rf /var/lib/apt/lists/*

2、另外给 github 的源码地址前挂了 ghproxy,目的都是为了加快构建的速度,对本身功能没有任何影响

3、修改了对外暴露的端口,从 80 改为了 3080,不改的话会遇到 (13)Permission denied: AH00072: make_sock: could not bind to address 0.0.0.0:80 错误

4、因为新增了 ports.confservername 文件,所以要新增两行

COPY ./config/ports.conf /etc/apache2/ports.conf  
COPY ./config/servername.conf /etc/apache2/conf-available/servername.conf

5、 启用了 docker-entrypoint.sh 文件

6、源码中 read.php 在根目录,原 Dockerfile 处理漏了,会出现错误

因此需要单独处理

    && cp -r /app/read.php /var/www/html \

7、 config/environment.php.example 需命名为 config/environment.php

修改后的 Dockerfile 及相关文件,都放在了 https://github.com/wbsu2003/Dockerfile/blob/main/PHP-Dynamic-Qr-code

vhost.conf

监听的端口要做相应的调整

config/vhost.conf 中,将 <VirtualHost *:80> 端口改为 <VirtualHost *:3080>

ports.conf

这个文件只要一行就可以

Listen 3080

servername.conf

这个文件也只要一行就可以

ServerName localhost

但是实际上可能并未生效,因为镜像中还是有警告,但不影响使用

AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.17.0.4. Set the 'ServerName' directive globally to suppress this message

docker-entrypoint.sh

修改成下面这样,目的是:

  1. 替换 servername.conf 中的 localhost 为环境变量 WEB_URL 传入的值,就像我前面说的,可能未生效,主要还是不了解 apache
  2. 替换 read.php 中的 include 路径,从 qrcode/config/config.php 改为 config/config.php
#!/bin/bash  
  
find '/etc/apache2' -name '*.conf' -exec sed -i -e 's,localhost,'"$WEB_URL"',g' {} \;  

find '/var/www/html' -name 'read.php' -exec sed -i -e 's,qrcode/config,config,g' {} \;  

exec apache2-foreground

构建流程

构建服务端镜像的基本命令如下👇

# 直接下载代码
git clone https://github.com/giandonatoinverso/PHP-Dynamic-Qr-code.git

# 通过代理下载原代码
git clone https://ghproxy.com/github.com/giandonatoinverso/PHP-Dynamic-Qr-code.git

# 进入目录
cd PHP-Dynamic-Qr-code/docker

# 构建镜像
docker build -t wbsu2003/qrcode:v1 .

# 生成容器
docker run -d \
   --name=qrcode \
   -p 3470:3080 \
   -v $(pwd)/saved_qrcode:/var/www/html/saved_qrcode \
   -e DOCKER_CID=docker \
   -e WEB_URL=192.168.0.197 \
   -e DATABASE_HOST=192.168.0.197 \
   -e DATABASE_PORT=3307 \
   -e DATABASE_NAME=qrcode \
   -e DATABASE_USER=qrcode \
   -e DATABASE_PASSWORD=123456 \
   -e DATABASE_PREFIX=qr_ \
   wbsu2003/qrcode:v1

安装

在群晖上以 Docker 方式安装。

建数据库

直接使用群晖自带的 Mariadb 10

phpMyAdmin 中创建了名为 qrcode 的空数据库。

为便于说明,假设数据库密码为 123456

所以根据上面的设置,最后得到的数据库相关的参数如下:

  • 数据库主机:192.168.0.197,与群晖主机 IP 一致;
  • 数据库端口:3307
  • 数据库用户:qrcode
  • 数据库密码:123456
  • 数据库库名:qrcode,因为勾选了与用户同名;

镜像下载

  1. 如果注册表能用,在注册表中搜索 wbsu2003/qrcode ,版本选择 latest

  1. 如果注册表用不了,但是可以下载,用 SSH 客户端登录到群晖,在命令行中直接输入
docker pull wbsu2003/qrcode:latest
  1. 如果既不能搜索,也不能下载,就去 https://dockerproxy.com 试试吧

命令行安装

如果你熟悉命令行,可能用 docker cli 更快捷

# 新建文件夹 qrcode 和 子目录
mkdir -p /volume1/docker/qrcode/saved_qrcode

# 进入 qrcode 目录
cd /volume1/docker/qrcode

# 修改目录权限 
chmod 777 saved_qrcode

# 运行容器
docker run -d \
   --restart unless-stopped \
   --name qrcode \
   -p 3470:3080 \
   -v $(pwd)/saved_qrcode:/var/www/html/saved_qrcode \
   -e DOCKER_CID=docker \
   -e WEB_URL=192.168.0.197 \
   -e DATABASE_HOST=192.168.0.197 \
   -e DATABASE_PORT=3307 \
   -e DATABASE_NAME=qrcode \
   -e DATABASE_USER=qrcode \
   -e DATABASE_PASSWORD=123456 \
   -e DATABASE_PREFIX=qr_ \
   wbsu2003/qrcode
可变
DOCKER_CID设为 docker
WEB_URL服务地址,应该没起作用
DATABASE_HOST数据库主机
DATABASE_PORT数据库端口
DATABASE_NAME数据库库名
DATABASE_USER数据库用户
DATABASE_PASSWORD数据库密码
DATABASE_PREFIX设为 qr_

config/environment.php 中看,只要 DOCKER_CID 是字符串就会读取环境变量中的数据库设置

也可以用 docker-compose 安装,将下面的内容保存为 docker-compose.yml 文件

version: '3'

services:
  qrcode:
    image: wbsu2003/qrcode
    container_name: qrcode
    restart: unless-stopped
    ports:
      - 3470:3080
    volumes:
      - ./saved_qrcode:/var/www/html/saved_qrcode
    environment:
      DOCKER_CID: "docker"
      WEB_URL: "192.168.0.197"
      DATABASE_HOST: "192.168.0.197"
      DATABASE_PORT: "3307"
      DATABASE_NAME: "qrcode"
      DATABASE_USER: "qrcode"
      DATABASE_PASSWORD: "123456"
      DATABASE_PREFIX: "qr_"

然后执行下面的命令

# 新建文件夹 qrcode 和 子目录
mkdir -p /volume1/docker/qrcode/saved_qrcode

# 进入 qrcode 目录
cd /volume1/docker/qrcode

# 修改目录权限 
chmod 777 saved_qrcode

# 将 docker-compose.yml 放入当前目录

# 一键启动
docker-compose up -d

运行

第一次运行,需要先进行设置

在浏览器中输入 http://群晖IP:3470/install/setup.php 就能看到设置界面

注意:这里提示了后台账号和密码,均为 superadmin

如果直接看到上面的界面,说明数据库设置正确,在 phpMyAdmin 中你会看到已经有了 3 张表

如果数据库设置不正确,会显示 The database could not be created, please check your database credentials!

Log in 按钮,跳转到登录界面

账号: superadmin,密码:superadmin

登录成功后的主界面

新建动态二维码

https://laosu.ml 为例

用微信扫出来是这样的

如果要印在名片或者彩页上,需用域名或者公网 IP

下载的二维码保存在 saved_qrcode 目录中

静态二维码的种类比较多

存在的问题

1、默认内置的 demo 数据的二维码,不管是动态还是静态,都不显示

2、除了 logout 外,ProfileSettings 都没链接,不知道是代码问题,还是 Docker 构建的问题

等官方放出正式的 docker 版本吧

参考文档

giandonatoinverso/PHP-Dynamic-Qr-code: PHP Dynamic Qr code is a script that allows the generation and saving of dynamic and static QR codes
地址:https://github.com/giandonatoinverso/PHP-Dynamic-Qr-code

PHP-Dynamic-Qr-code/docker at master · giandonatoinverso/PHP-Dynamic-Qr-code · GitHub
地址:https://github.com/giandonatoinverso/PHP-Dynamic-Qr-code/tree/master/docker

PHP Qr Code Generator- Documentation
地址:https://giandonatoinverso.it/documentation/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/705845.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【2023,学点儿新Java-27】是的——C语言中的const关键字 | 附:按照类型 快速了解与划分:C语言中的关键字 | goto关键字解释

前情回顾&#xff1a; 【2023&#xff0c;学点儿新Java-26】关键字介绍示例代码&#xff1a;assert 断言&#xff08;如何启用断言&#xff09;&#xff0c;以 验证一个数组的长度是否不为零 为例说明【2023&#xff0c;学点儿新Java-25】如何解决浮点计算存在误差&#xff1a…

Selenium Grid入门详解

目录 前言&#xff1a; 一、简介 二、使用场景 三、使用前提 四、使用方式 五、实现在另一台电脑运行脚本 前言&#xff1a; Selenium Grid是一个用于分布式测试的工具&#xff0c;它允许同时在多个机器上执行Selenium测试。通过使用Selenium Grid&#xff0c;你可以在不…

Linux系统Centos7 安装MySQL8.0详细步骤

MySql安装 1.下载wget命令 yum -y install wget 2. 在线下载mysql安装包 wget https://repo.mysql.com//mysql80-community-release-el7-3.noarch.rpm 3.MySQL的GPG升级了&#xff0c;需要更新&#xff0c;如果是新安装的MySQL&#xff0c;执行以下脚本即可&#xff1…

Vite + Vue3 + Electron实现进程通信

Vite Vue3 Electron实现进程通信 实现 渲染进程 / 主进程 通信&#xff08;IPC&#xff09; Electron 是一个基于 Chromium 和 Node.js 的桌面应用程序开发框架&#xff0c;而 Vue3 则是一种流行的前端框架。将两者结合使用可以快速地打造出跨平台的桌面应用程序。在这种组…

Sui x KuCoin Labs夏季黑客松第三批入围项目公布

自Sui x KuCoin Labs夏季黑客松开放注册以来&#xff0c;已收获了众多开发者的报名参与。赛程过半&#xff0c;截至目前为止&#xff0c;第一批和第二批入围项目已在前两周公布&#xff0c;第三批入围名单项目新鲜出炉&#xff0c;进入最终的Demo Day。 第三批入围名单 SuiVi…

在 Linux 中查找 IP 地址的 3 种简单方法

在 Linux 系统中&#xff0c;经常需要查找 IP 地址以进行网络配置、故障排除或安全管理。无论是查找本地主机的 IP 地址还是查找其他设备的 IP 地址&#xff0c;本文将介绍三种简单的方法&#xff0c;帮助你在 Linux 中轻松找到所需的 IP 地址。 总结 通过上述三种简单的方法&…

自动化测试进阶之路(WEB自动化二)

一、设计模式 Pom模块关键字驱动模式 pom模块&#xff1a;page object model 页面对象模式好处&#xff1a; 解决线性脚本的问题解决代码不能重复利用的问题后期的维护问题 分三层&#xff08;页面对象层调用基础层的方法&#xff0c;测试用例层调用页面对象层的方法&#xff0…

Spring Boot 有哪些方式可以实现热部署

一、什么是热部署&#xff1f; 释义 所谓热部署&#xff0c;就是在应用正在运行的时候升级软件&#xff0c;却不需要重新启动应用。 对于Java应用程序来说&#xff0c;热部署就是在运行时更新Java类文件。在基于Java的应用服务器实现热部署的过程中&#xff0c;类装入器扮演着…

EasyDSS视频直播点播平台视频回看列表显示为ID的排查与优化

视频直播点播EasyDSS平台具备灵活的视频能力&#xff0c;包括直播、点播、转码、管理、录像、检索、时移回看等&#xff0c;平台支持音视频采集、视频推拉流、播放H.265编码视频、存储、分发等能力服务&#xff0c;可应用在无人机推流、在线直播、虚拟直播、远程培训等场景中。…

String面试

以下讨论以jdk8为标准&#xff1a; String Pool&#xff1a;字符串常量池 存储字面量位于堆中&#xff0c;不在元空间intern()方法会去常量池找&#xff0c;没有的话就创建一个&#xff0c;返回常量池中的地址&#xff1b;有的话就直接返回对象地址 new String(“”)方法强制创…

3.Hive SQL数据定义语言(DDL)

1. 数据定义语言概述 1.1 常见的开发方式 &#xff08;1&#xff09; Hive CLI、Beeline CLI Hive自带的命令行客户端 优点&#xff1a;不需要额外安装 缺点&#xff1a;编写SQL环境恶劣&#xff0c;无有效提示&#xff0c;无语法高亮&#xff0c;误操作率高 &#xff08;2&…

IMX6ULL系统移植篇-uboot的配置与编译

一. 编译 uboot简介 开发板的资源 &#xff1a;256MB(DDR3) 512MB(NAND)核心板 这里使用的是阿尔法开发板&#xff0c;256MB的 DDR&#xff0c;核心板是 512MB的 Nand-Flash。 二. 编译 uboot 创建 /uboot/alientek_uboot 目录文件&#xff0c;将正点原子提供的 uboot源码包…

chatgpt赋能python:如何将Python图形居中

如何将Python图形居中 介绍 在Python编程中&#xff0c;绘图是非常重要的环节。无论是作为数据可视化的一部分&#xff0c;还是作为界面设计的基础&#xff0c;具有图形界面的Python应用程序都需要在屏幕上将图形元素居中。然而&#xff0c;很多新手在实现图形居中时往往会遇…

常州工学院计算机组成原理2022-2023第一学期补考

一、简答题&#xff08;共30分,每题6分&#xff09; 1、以将指令地址码指示的存储单元中的操作数取出后送至运算器的ACC中为例&#xff0c;完成一条指令的信息流程。 2、什么是RISC&#xff1f;请简述它的主要特点。比较RISC和CISC的异同之处。 RISC全称Reduced Instruction …

CentOS 执行yum命令报错【错误:为仓库 ‘appstream‘ 下载元数据失败: ...】

文章目录 一、遇到问题二、原因分析三、解决问题方案一&#xff1a;更新centos提供的yum源新地址1. yum源仓库配置文件内容2. 更新yum源新地址3. 测试yum安装命令 方案二&#xff1a;更新为 国内的yum源1. 使用 阿里的yum源2. 使用 网易的yum源3. 使用 清华的yum源 四、总结 一…

75、基于51单片机交通灯+人行道+左转系统设计(程序+原理图+Proteus仿真+参考论文+开题报告+任务书+元器件清单等)

摘 要 近年来随着科技的飞速发展&#xff0c;单片机的应用正在不断深入&#xff0c;同时带动传统控制检测技术日益更新。在实时检测和自动控制的单片机应用系统中&#xff0c;单片机往往作为一个核心部件来使用&#xff0c;仅单片机方面知识是不够的&#xff0c;还应根据具…

常州工学院数据库2022-2023第二学期期末答案

1. 不能够成功执行&#xff0c;因为关系R的主码为AB&#xff0c;故而关系重属性AB不可以完全相同&#xff0c;关系中已经存在了A1&#xff0c;B1&#xff0c;故而不能够将相同的A&#xff0c;B字段值放入关系中 2. update 职工 set 所在部门号 is null where 所在部门号 in(…

ARM接口题目

1)说出ARM可以工作的模式名字。 ARM有8个基本工作模式: User :非特权模式&#xff0c;大部分任务执行在这种模式 FIQ :当一个高优先级&#xff08;fast)中断产生时将会进入这种模式 IRQ :当一个低优先级&#xff08;normal)中断产生时将会进入这种模式 Supervisor :当复位…

云原生——Docker容器化实战

❄️作者介绍&#xff1a;奇妙的大歪❄️ &#x1f380;个人名言&#xff1a;但行前路&#xff0c;不负韶华&#xff01;&#x1f380; &#x1f43d;个人简介&#xff1a;云计算网络运维专业人员&#x1f43d; 前言 "Docker"一词指代了多个概念&#xff0c;包括开源…

Java9模块化学习总结

文章目录 JDK9 模块化新特性JDK9 模块化入门案例JDK9 模块化知识图谱1&#xff09;模块化语法2&#xff09;模块化迁移 小结 JDK9 模块化新特性 在 JDK9 之前&#xff0c;在日常开发中可能会遇到过以下问题&#xff1a; 工程依赖工具包的内部实现类。比如 sun.misc.BASE64Enc…