• 本博客已正式上线 IPv4 + IPv6 双栈访问

利用 PHP QR Code 生成二维码支持 URL 直接调用

挨踢网络 Young Free! 5年前 (2018-06-09) 5514次浏览 25个评论 扫描二维码

> 挨踢网络 > 利用 PHP QR Code 生成二维码支持 URL 直接调用

一不小心,又开始“码代码”了,在此,Young Free 得特别声明:哥真不是学计算机的,也不是搞网络工程的!所有代码都来自网络,哥只是根据自己需要,拼接调整了一下。感谢开源源码的大神们,虽然,Young Free 也不知道大神们叫什么名字。

需求

嗯,码代码前,都是要先分析需求的。

Young Free 主题使用的云落的 Git 主题,这款主题,在文章也右上角,提供了扫二维码在手机上阅读博客的功能。之前 Young Free 一直在调用百度网盘的二维码生成 API,但前几日,百度突然关闭了这个功能,导致 Young Free 博客上的这个二维码功能失效了。

方案

利用第三方服务

几经百度,找到了多个替代解决方案,可大多数都不支持 https 调用,这里就不提及了,唯有搜狐快站支持 https 调用,调用地址如下

https://www.kuaizhan.com/common/encode-png?large=true&data=https://www.ucwz.net

自行搭建

虽然免费服务也好用,但保不准那天也会关闭服务,于是,Young Free 就有了搭建一个自己专用的二维码生成服务的想法。既然要搭建,选用构架和脚本语言的问题就来了。

构架

根本谈不上构架,这么个简单的服务,选择一个脚本就行了。百度出来结果一大堆,对于 Young Free 来说可行的有 JAVA, Python, PHP 三种语言编写的方案。Java 和 Python 需要更新 哥的阿里云 ESC 环境,这个工程有点大,所以 PHP 是最适合的。接下来就开始继续度娘可用代码。

算法

PHP 生成二维码的方法一大堆,Young Free 要的是最简单的,所以,算法什么的也是浮云。利用 PHP QR Code 源码,2个文件就能搞定所有需求。

源码下载地址:https://sourceforge.net/projects/phpqrcode/

注意事项:PHP环境必须开启支持GD2扩展库支持(一般情况下都是开启状态)

下载下来的一大堆文件,我们只取 phpqrcode.php 一个就行,另外一个 PHP 文件需要我们自己手动写一写。因为不需要在自己服务器上保存二维码,也没有美化的需求,Young Free 百度到了如下可用代码。

<?
//生成原始的二维码(不生成图片文件)  
function yfqr($url=''){  
    require_once 'phpqrcode.php';  
      
    $value = $url;                  //二维码内容  
    $errorCorrectionLevel = 'L';    //容错级别   
    $matrixPointSize = 5;           //生成图片大小    
    //生成二维码图片  
    $QR = QRcode::png($value,false,$errorCorrectionLevel, $matrixPointSize, 2);  
}  
//调用查看结果  
yfqr('https://www.ucwz.net'); //在这个 ()括号里写需要生成二维码的网址或文字
?>

不需要美化的终极原因是因为搞不定 QAQ.

问题

这个代码,只能生成源代码里面写好的网址或文字内容的二维码,Young Free 需要的是直接通过 URL 来调用,显然需要改造一下。

既然源码中网址那里是 定量,那可不可以变换成 变量 啊?开干才知道。Young Free 一直在用一个站外链接跳转的中间页,里面就用到了获取 URL 中 跳转目标 URL 的函数。拿过来用用吧。

<?php $url=$_GET['url']; echo htmlspecialchars($url);?> // 核心为 $_GET['url'] 这个函数

完善代码

<?
function yfqr($url=''){  
    require_once 'phpqrcode.php';  
      
    $value = $url;                  //二维码内容  
    $errorCorrectionLevel = 'L';    //容错级别   
    $matrixPointSize = 5;           //生成图片大小    
    //生成二维码图片  
    $QR = QRcode::png($value,false,$errorCorrectionLevel, $matrixPointSize, 2);  
}  
//调用查看结果  
yfqr($_GET['url'],'');  //获取目标网址的URL
?>

到这里,大功就告成了。其实在 获取目标网址 URL 这个变量这里,折腾了好久,不懂 PHP 的结果就是不知道怎么“打印”获取到的变量为常量,尴尬。

利用 PHP QR Code 生成二维码支持 URL 直接调用

加限制

可 Young Free 并不满足,这个调用地址是可以随随便便手动打开的,没有任何验证,Young Free 的博客可是经常遭到攻击的,不做点限制,VPS 的这点点资源岂不是扛不住。加点限制,非本站站内,不能打开。整个源码如下

<?php
$home = "https://www.ucwz.net";
$name = "Young Free | 年轻人 无拘束";
function wp_die($home,$name) {
    echo '<!DOCTYPE html PUBLIC "-//W3C//Dtd XHTML 1.0 transitional//EN" "http://www.w3.org/tr/xhtml1/Dtd/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta charset="UTF-8" /><meta http-equiv=Content-Type content="text/html;charset=utf-8">
<title>无效地址</title></head>
    <body><br/><br/><br/><br/><br/><br/><br/>
<center>
此URL不允许直接复制打开....<br/>
---来自<a href="'.$home.'/">'.$name.'</a>
</center>
    </body>
    </html>';
    exit();
}
if(empty($_SERVER['HTTP_REFERER']) || strpos(strtoupper($_SERVER['HTTP_REFERER']),strtoupper($home)) === false)
    wp_die($home,$name);
?>
<?
function yfqr($url=''){  
    require_once 'phpqrcode.php';  
      
    $value = $url;                  //二维码内容  
    $errorCorrectionLevel = 'L';    //容错级别   
    $matrixPointSize = 5;           //生成图片大小    
    //生成二维码图片  
    $QR = QRcode::png($value,false,$errorCorrectionLevel, $matrixPointSize, 2);  
}  
//调用查看结果  
yfqr($_GET['url'],'');  //获取目标网址的URL
?>

调用方式

哦,说了这么多,怎么调用呢?

<img src="https://www.ucwz.net/qrcode/?url=https://www.ucwz.net/seo/2214.html"> //替换 url= 后面的网址就可以了

前台效果

啦啦啦啦~~~如下图,也可以把鼠标移动到文章右上角的 扫描二维码 试试。

利用 PHP QR Code 生成二维码支持 URL 直接调用

源码下载

想搭建自己的二维码生成服务?Young Free 已经把制作好的源码打包好了,下载后,只需替换 Young Free 的网址然后上传到服务器就行了。整个代码只有 121KB。

百度云下载

参考文档:https://blog.csdn.net/sinat_35861727/article/details/73862991


Young Free! , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA 4.0协议进行授权
转载请注明原文链接:利用 PHP QR Code 生成二维码支持 URL 直接调用
喜欢 (11)
[]
分享 (0)
关于作者:
欢迎来吐槽,也欢迎一起交流。如果无法在本文下评论,可以点击信封按钮,给我发送邮件。
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!


请文明发言,谢谢。
  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
(25)个小伙伴在吐槽
  1. 大神,我看你的地址怎么是这样的啊 怎么改,谢谢!<img data-original="data:image/png;base64
    三问2020-02-29 23:14 回复
    • 我现在用的是主题自带的二维码生成,这个又是用的JS生成方法。我也没研究过。
      Young Free!2020-03-05 20:49 回复
  2. 大佬,按照你的方法,还是不行,感觉是获取不到地址。
    mototown2020-01-22 19:26 回复
  3. 博主是怎么把二维码图片转成base64编码的
    Yiven2019-08-02 13:50 回复
  4. 为什么我的不好用呢 显示不了二维码 地址 http://www.qian.lu/qrcode/?url=https://www.ucwz.net/seo/2214.html
    Www.Last.City2019-03-11 11:40 回复
    • 这个把我难住了,我也不清楚,你看下你的 PHP 开启 GD2 扩展开启了没,没这个是无法生成图片的。
      Young Free!2019-03-13 21:51 回复
  5. 我在想php能不能获取网页视频地址然后输出呢 :grin:
    九日2018-08-14 08:58 回复
    • 肯定可以的,那些个 VIP视频解析服务,不就是这么搞的吗
      Young Free!2018-08-14 10:48 回复
  6. daolao.Orz.png
    Liues2018-07-21 08:13 回复
  7. 厉害了,学习学习
    Blogbyme2018-07-09 16:39 回复
    • 都是大佬们提供的核心,大佬们才厉害,像大佬们学习
      Young Free!2018-07-10 20:36 回复
  8. 我也加个试试
    芭比2018-06-29 13:57 回复
  9. 最近百度的二维码api关闭了,刚好可以自建一个
    Yiveco2018-06-16 07:25 回复
    • 自建才是最稳定的 :mrgreen: 你的博客访问出现了 回应时间过长 的问题,多次刷新无效,我的宽带是 湖南常德移动宽带。
      Young Free!2018-06-16 08:34 回复
      • 刚刚禁止ping服务器IP,然后因为域名是通过a记录解析的所以炸了233
        Yiveco2018-06-16 08:46 回复
        • 服务器禁ping似乎和 A记录解析不冲突额,确定不要检查其它问题?
          Young Free!2018-06-17 22:19 回复
          • 我允许ping之后,a记录就可以解析了,应该是禁ping的锅吧233
            Yiveco2018-06-18 08:14 回复
  10. 我记得张戈博客也有一个,感觉不错的选择
    BanYuner2018-06-10 12:11 回复
    • 刚刚去张戈博客搜了下,还真有2个解决方案,其中 JS 生成二维码,太厉害了,不用担心服务器资源消耗问题,也没有加载慢的问题。
      Young Free!2018-06-10 15:30 回复
      • 我是直接通过php文件执行的,毕竟php执行起来速度比较快
        BanYuner2018-06-10 22:03 回复
        • 好,听大佬意见,我也不折腾了,就用这个PHP生成的。
          Young Free!2018-06-12 21:34 回复