php 使用phpqrcode生成二维码并上传到OSS

摘要:
通常,调用phpqrcode第三方插件会将生成的二维码图像保存到服务器。在不保存服务器的情况下,它还将以头标头的形式将其输出到浏览器。我日思夜想,所以我想出了一个实现方法。
一般情况调用phpqrcode第三方插件 会把生成的二维码图片保存到服务器,不保存服务器也会以header头的形式输出到浏览器,(我们不允许把图片文件保存的liunx服务器,只能保存到阿里云OSS存储服务器  不符合我的逻辑)所有经过我的日思夜想,于是想出来的实现方式 。我可不可以跟爬虫一样先把这个图片文件资源先获取到,然后直接在后端上传oss

createQrcode 生成二维码方法

    public function createQrcode(){
        if(!$_POST['str'])  return false;
        $str = $_POST['str'];
        require_once ROOT.'cube/action/phpqrcode/phpqrcode/qrlib.php';         //包含类文件

        $QRcode = new QRcode();
        //允许的错误级别
        $errorCorrectionLevel = 'L';
        if (isset($level) && in_array($level, array('L','M','Q','H')))
            $errorCorrectionLevel = $level;   

        //二维码大小
        $matrixPointSize = 4;
        if (isset($_POST['size'])){
            $size = $_POST['size'];
            $matrixPointSize = min(max((int)$size, 1), 10);
        }
        if (isset($str)) {

            $QRcode->png($str, false, $errorCorrectionLevel, $matrixPointSize);

        }else{
            return "ERRORDATA";
        }     

    }

uploadqrcode 获取二维码上传OSS

    public function uploadqrcode(){
        //生成而我加密字符串
        $str = 'orderid=111';    // 被加密信息
        $key = 'resss';    // 密钥
        $strs = A('strlib/basic/encrypt',array($str, $key));//加密后的字符串

        $name = date('Y-m-d').A('strlib/basic/randstr',array(6,3));
        /*
        //模拟get请求
        $data = array(
            'name'=>'zhezhao',
            'age'=>'23'
            );
        $query = http_build_query($data);

        $url = 'http://localhost/get.php';//这里一定要写完整的服务页面地址,否则php程序不会运行

        $result = file_get_contents($url.'?'.$query);
        */
        //这里为了安全性我选择post请求
        $data = array(
            'str'=>$strs
            );

        $query = http_build_query($data);

        $options['http'] = array(
             'timeout'=>60,
             'method' => 'POST',
             'header' => 'Content-type:application/x-www-form-urlencoded',
             'content' => $query
            );

        $url = 'http://'.$_SERVER['HTTP_HOST'].'/index.php/order/lineOrder/createQrcode';
        $context = stream_context_create($options);
        $result = file_get_contents($url, false, $context);
        A('oss/object/putObject',array('bucket',$_SERVER['HTTP_HOST'].'/lineorder/qrcode/'.$name.'.png',$result));
    }

这里遇到一个问题就是我需要把二维码的参数传递个createQrcode  所有想到用模拟表单

另附字符串加密方法 (可逆向解密)

//加密    
public function encrypt($data, $key)
    {
        $key    =    md5($key);
        $x        =    0;
        $len    =    strlen($data);
        $l        =    strlen($key);
        $char = $str = '';
        for ($i = 0; $i < $len; $i++)
        {
            if ($x == $l)
            {
                $x = 0;
            }
            $char .= $key{$x};
            $x++;
        }
        for ($i = 0; $i < $len; $i++)
        {
            $str .= chr(ord($data{$i}) + (ord($char{$i})) % 256);
        }
        return base64_encode($str);
    }
//解密
 public function decrypt($data, $key)
    {
        $key = md5($key);
        $x = 0;
        $data = base64_decode($data);
        $len = strlen($data);
        $l = strlen($key);
        $char = $str = '';
        for ($i = 0; $i < $len; $i++)
        {
            if ($x == $l)
            {
                $x = 0;
            }
            $char .= substr($key, $x, 1);
            $x++;
        }
        for ($i = 0; $i < $len; $i++)
        {
            if (ord(substr($data, $i, 1)) < ord(substr($char, $i, 1)))
            {
                $str .= chr((ord(substr($data, $i, 1)) + 256) - ord(substr($char, $i, 1)));
            }
            else
            {
                $str .= chr(ord(substr($data, $i, 1)) - ord(substr($char, $i, 1)));
            }
        }
        return $str;
    }

生成随机字符串

    // 数值型字符串,代号 1
    private $cs1 = array('0','1','2','3','4','5','6','7','8','9');
    // 纯小写字符串,代号 2
    private $cs2 = array('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z');
    // 多类型字符串,代号 3
    private $cs3 = array
    (
        '0','1','2','3','4','5','6','7','8','9',
        'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z',
        'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'
    );

    public function randstr($len,$type=1)
    {
        if( $len<1 ) return false;
        $RET = '';
        switch( $type )
        {
            case 1:
                $RET = $RET.$this->randcs1(false);
                for( $i=2; $i<=$len; $i++ ) $RET = $RET.$this->randcs1();
                return $RET;
            case 2:
                for( $i=1; $i<=$len; $i++ ) $RET = $RET.$this->cs2[rand(0,25)];
                return $RET;
            case 3:
                $RET = $RET.$this->randcs3(false);
                for( $i=2; $i<=$len; $i++ ) $RET = $RET.$this->randcs3();
                return $RET;
            default:
                return false;
        }
    }

    private function randcs1($zero=true)
    {
        $from = 1;
        if( $zero ) $from = 0;
        return $this->cs1[rand($from,9)];
    }

    private function randcs3($zero=true)
    {
        $from = 1;
        if( $zero ) $from = 0;
        return $this->cs3[rand($from,61)];
    }

免责声明:文章转载自《php 使用phpqrcode生成二维码并上传到OSS》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇PHP如何实现验证码JAVA的mock工具mockito简介下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

PHP实现IP访问限制及提交次数的方法详解

一、原理 提交次数是肯定要往数据库里写次数这个数据的,比如用户登陆,当用户出错时就忘数据库写入出错次数1,并且出错时间,再出错写2,当满比如5次时提示不允许再登陆,请明天再试,然后用DateDiff计算出错时和now()的时间,如果大于24就再开放让他试。 封IP的话特别是给IP断就比较简单了, 先说给IP段开放的情况:先取出客户访问的IP,为了解释方便,...

zabbix安装注意以下几个部分

1. /etc/opt/rh/rh-php72/php-fpm.d/zabbix.conf [zabbix] user = nginx group = nginx listen.owner = nginx listen.group = nginx listen.mode = 0666 listen = /var/opt/rh/rh-php72/run/...

php缺失curl,mb_sting,gd库等文件的安装

一、缺失CURL库: 查询:apt-cache search curl | grep php 安装:安装相应PHP版本的CURL库 apt-get install php7.0-curl 1 二、缺失MB_STRING 查询:apt-cache search php-mbstring| grep php 安装:安装相应PHP版本的CURL库 apt-ge...

PHP面试题详解

自己从网上找了几份常考到的PHP面试题进行了整理,然后才有了这份PHP面试题,并且我把所有的题目进行了详细分析和代码分析,希望可以对大家有帮助,谢谢大家。 这份试题我也上传到了百度云,有需要的可以直接去百度云下载这份试题,希望可以帮到大家。 链接:http://pan.baidu.com/s/1i5oTN7n 密码:ykws PHP面试题 一、选择题 1....

PHP的反射类ReflectionClass、ReflectionMethod使用实例

PHP5 具有完整的反射API,添加对类、接口、函数、方法和扩展进行反向工程的能力。 反射是什么? 它是指在PHP运行状态中,扩展分析PHP程序,导出或提取出关于类、方法、属性、参数等的详细信息,包括注释。这种动态获取的信息以及动态调用对象的方法的功能称为反射API。反射是操纵面向对象范型中元模型的API,其功能十分强大,可帮助我们构建复杂,可扩展的应用。...

PHP学习(类型转化)

   PHP 在变量定义中不需要(或不支持)明确的类型定义;变量类型是根据使用该变量的上下文所决定的。也就是说,如果把一个 string 值赋给变量 $var,$var 就成了一个 string 。如果又把一个integer 赋给 $var,那它就成了一个integer 。     PHP 的自动类型转换的一个例子是加法运算符“+”。如果任何一个操作数是f...