专栏首页张戈的专栏分享张戈博客自用的php网址在线转换二维码的API源码

分享张戈博客自用的php网址在线转换二维码的API源码

最新补充:博客已分享性能最好的 js 生成二维码方案==>传送门

去年张戈博客曾分享过一篇与二维码 API 有关的文章:《分享几个可用的二维码 API,以及给博客添加文章二维码图片的方法》,由于第三方二维码 API 总感觉稳定性和自定义性稍差,所以就到网上爬了一下相关代码,自己搭建了一个二维码 API,用了几个月感觉良好,完全可以满足我博客的自定义需求。至于博客二维码这个功能是否鸡肋,那就仁者见仁智者见智了。我个人认为,在这个移动互联网飞速发展的时代,抢占先机,做好移动端的用户体验至关重要!

这个功能不是原创,而且百度一搜一大把,都不好意思拿来分享一二。最近看到有网友留言,想要我分享这个二维码 API 源码,鉴于博客分享初衷,就厚着脸皮贴出来了。当然,不止是那个 qr code 类,而是搭建成品的整体代码或心得,毕竟张戈博客存在的目的就是尽力降低各类 IT 教程的使用门槛(哈,是不是感觉很高尚...)!

一、PHP 代码

<?php
/**
* PHP在线网址二维码API源码分享示例 By 张戈博客(zhangge.net)
* 文章地址:http://zhangge.net/5031.html
**/
 
//载入qrcode类
include "./phpqrcode.php";
 
//取得GET参数
$url        = isset($_GET["url"]) ? $_GET["url"] : 'help';
$errorLevel = isset($_GET["e"]) ? $_GET["e"] : 'L';
$PointSize  = isset($_GET["p"]) ? $_GET["p"] : '3';
$margin     = isset($_GET["m"]) ? $_GET["m"] : '0';
preg_match('/http:\/\/([\w\W]*?)\//si', $url, $matches);
 
//简单判断
//if ( $matches[1] != 'zhangge.net' && $matches[1] != 'zgboke.com' || $url == 'help') { //取消此行注释并注释下面一行,就能加入自定义的url过滤功能
if ( $url == 'help'){
    //简单的描述一下使用方法
    header("Content-type: text/html; charset=utf-8");
    echo '<title>在线二维码API接口| 张戈博客</title>';
    echo '<h1>欢迎使用张戈博客在线二维码API服务!</h1>
    使用前请仔细查看参数说明:<br />
    <br />
    url: 二维码对应的网址<br /><br />
    m&nbsp&nbsp: 二维码白色边框尺寸,缺省值: 0px<br /><br />
    e&nbsp&nbsp: 容错级别(errorLevel),可选参数如下(缺省值 L):<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbspL水平    7%的字码可被修正<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbspM水平    15%的字码可被修正<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbspQ水平    25%的字码可被修正<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbspH水平    30%的字码可被修正<br />
    p&nbsp&nbsp: 二维码尺寸,可选范围1-10(具体大小和容错级别有关)(缺省值:3)<br /><br />
    常规用法:<a href="//seo.zgboke.com/qr/?m=0&e=L&p=3&url=http://zhangge.net/" target="_blank">http://seo.zgboke.com/qr/?m=0&e=L&p=3&url=http://zhangge.net/</a><br /><br />
    
    CDN 加速:<br />
    格	式:http://seo.zgboke.com/qr/$m_$e_$p_$url_cdn.png <br />
    示	例:<a href="//seo.zgboke.com/qr/0_l_3_http://zhangge.net_cdn.png" target="_blank">http://seo.zgboke.com/qr/0_l_3_http://zhangge.net_cdn.png</a><br />
    ';
	exit();
} else  {
    //调用二维码生成函数
    createqr($url, $errorLevel, $PointSize, $margin);
}
 
//简单二维码生成函数
function createqr($value,$errorCorrectionLevel,$matrixPointSize,$margin) {
    QRcode::png($value, false, $errorCorrectionLevel, $matrixPointSize, $margin);
}
?>

将以上代码保存为 php 文件(比如 qr.php),上传到网站指定目录(比如根目录 /)。

二、QrCode 类

下载 PHP 的 QrCode 类,上传到网站目录,其实百度一搜一大把,还是贴上张戈博客自用的文件吧!

下载地址

Ps:以上相关代码均已包含在内。

三、CDN 加速

因为这个 API 是在线生成的,如果请求过于频繁,将会影响到服务器性能和加载速度。所以,我们有必要继续优化一下。我个人想到 3 个解决方案:

①、每生成一个新的二维码图片就缓存一份到服务器,下次若是相同的内容,将直接读取; ②、利用伪静态重写请求地址,伪装成静态文件格式,比如 png、jpg 等,然后开启免费 CDN; ③、结合①和②,实现伪静态+CDN 加速+浏览器缓存加速,达到优化加载速度。

目前张戈博客仅使用了第 ② 种方案,已完全可以满足博客的需求,所以就懒得去折腾更完善的方法,感兴趣的童鞋可以自己去试试,下面说一下伪静态规则。

张戈博客将这个 API 搭建在万网的免费虚拟主机上,所以仅分享 Apache 伪静态规则,其他 WEB 服务器请自行解决。

Apache 伪静态规则:

RewriteEngine on
RewriteBase /
 
#QR二维码
RewriteRule ^qr/(.*)_(.*)_(.*)_http:/(.*)_cdn\.png$ qr/index.php?m=$1&e=$2&p=$3&url=http://$4 [L]
RewriteRule ^qr/(.*)_(.*)_(.*)_(.*)_cdn\.png$ qr/index.php?m=$1&e=$2&p=$3&url=$4 [L]

注:以上是将 API 源码上传到网站根目录下的 qr 文件夹的例子!

伪静态之后,这个二维码地址就是一个正常的 png 格式了,只要到免费 CDN(比如百度云加速或 360 网站卫士等)开启静态资源缓存即可实现 CDN 加速。

四、使用范例

直接访问本文第一段代码所保存的文件就能看到简单的使用说明了:

欢迎使用张戈博客在线二维码API服务!
 
使用前请仔细查看参数说明:
 
url: 二维码对应的网址
 
m  : 二维码白色边框尺寸,缺省值: 0px
 
e  : 容错级别(errorLevel),可选参数如下(缺省值 L):
     L水平 7%的字码可被修正
     M水平 15%的字码可被修正
     Q水平 25%的字码可被修正
     H水平 30%的字码可被修正
p  : 二维码尺寸,可选范围1-10(具体大小和容错级别有关)(缺省值:3)
 
常规用法:http://seo.zgboke.com/qr/?m=0&e=L&p=3&url=http://zhangge.net/
 
CDN 加速:
格    式:http://seo.zgboke.com/qr/$m_$e_$p_$url_cdn.png 
示    例:http://seo.zgboke.com/qr/0_l_3_http://zhangge.net_cdn.png

查看效果:http://seo.zgboke.com/qr/0_l_3_http://zhangge.net_cdn.png

按下 F12,到 NetWork 选项卡查看头部已经可以看到百度云加速的 HIT 缓存标识了!

至于如何应用到博客当中,请移步查看张戈博客以前分享的教程:http://zhangge.net/4609.html

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Linux:awk命令详解

    ? 简单使用: awk :对于文件中一行行的独处来执行操作 。 awk -F :'{print $1,$4}'   :使用‘:’来分割这一行,把这一行的第一...

    张戈
  • 正确的Win主机网站伪静态设置方法

    在这两天折腾主题的过程中,再次注意到伪静态的设置,之前刚建站时用的是最简单的404 错误重定向的方法:复制代码,新建成一个 404.php 丢到 web 根目录...

    张戈
  • 分享几个可用的二维码API,以及给博客添加文章二维码图片的方法

    最新补充:博客已分享性能最好的 js 生成二维码方案==>传送门 今天发现之前用的二维码 API 不怎么稳定了,老是出现图裂无法加载的情况。用的是 api.qr...

    张戈
  • 使用describe命令进行Kubernetes pod错误排查

    我有一个pod名叫another,用kubectl create创建后发现过了29分钟,状态还是处于ContainerCreating阶段。

    Jerry Wang
  • LeetCode 1:两数之和 Two Sum

    给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。

    爱写bug
  • Unity基础教程-物体运动(十)——环境交互(Movement with Consequences)

    这是关于控制角色移动的教程系列的第十期。它让环境可以以各种方式和对象运动产生交互。

    放牛的星星
  • .NET/ASP.NETMVC 深入剖析 Model元数据、HtmlHelper、自定义模板、模板的装饰者模式(三)

    阅读目录: 7.HtmlHelper、HtmlHelper<T>中的ViewModel的类型推断 8.控制ViewModel中的某个属性的呈现(使用Partia...

    王清培
  • Leetcode 1320 二指输入的的最小距离(多情况讨论,DP)

    二指输入法定制键盘在 XY 平面上的布局如上图所示,其中每个大写英文字母都位于某个坐标处,例如字母 A 位于坐标 (0,0),字母 B 位于坐标 (0,1),字...

    glm233
  • Linux运维工程师必备的80个监控工具全集(上)

    随着互联网行业的不断发展,各种监控工具多得不可胜数。这里列出网上最全的监控工具。让你可以拥有超过80种方式来管理你的机器。

    拓荒者
  • 画解算法 1-两数之和

    https://leetcode-cn.com/problems/two-sum/

    灵魂画师牧码

扫码关注云+社区

领取腾讯云代金券