1. 1
  2. 1
  3. 1
  4. 1
  5. 1
  6. 1
  • 欢迎您
    php 链接转二维码图片
    转载 2020-12-24 技术语录

    22

    // 类库下载地址   
    $value = ' 
     $errorCorrectionLevel = 'L';//容错级别 
     $matrixPointSize = 20;//生成图片大小 
     $QR = 'code.png'; //生成的原始二维码图名
    
        if(!file_exists($QR)){
            images($value,$QR, $errorCorrectionLevel, $matrixPointSize);
        }else{         echo '图片已经有了';
         }function images($value,$QR, $errorCorrectionLevel, $matrixPointSize){    // 加载类库
        include './phpqrcode/phpqrcode.php'; 
        //生成二维码图片 后面三个参数可选
        QRcode::png($value, $QR, $errorCorrectionLevel, $matrixPointSize, 2); 
        $logo = '1.jpg';//准备好的logo图片 
         
         // 下面是在二维码中放logo
        if ($logo !== FALSE) { 
            // 操作GD库
             $QR = imagecreatefromstring(file_get_contents($QR)); 
             $logo = imagecreatefromstring(file_get_contents($logo)); 
             $QR_width = imagesx($QR);//二维码图片宽度 
             $QR_height = imagesy($QR);//二维码图片高度 
             $logo_width = imagesx($logo);//logo图片宽度 
             $logo_height = imagesy($logo);//logo图片高度 
             $logo_qr_width = $QR_width / 5; 
             $scale = $logo_width/$logo_qr_width; 
             $logo_qr_height = $logo_height/$scale; 
             $from_width = ($QR_width - $logo_qr_width) / 2; 
             //重新组合图片并调整大小 
             imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width, 
             $logo_qr_height, $logo_width, $logo_height); 
        } 
        //输出图片 图片名为code2.jpg
        Header("Content-type: image/png");
        ImagePng($QR,'code_2.jpg');
    }// 如果要解析二维码,你要下载php-zbarcode类库
    
    两个图片合成
    function opentow(){
            $Absolute_Path=substr($_SERVER['SCRIPT_FILENAME'],0,-10);
            //本地的绝对路径
            $dst_path = '4.png';//背景图  
            $src_path= 'code.png'; //头像
            $hz = substr(strrchr($dst_path, '.'), 1);
            $path = $Absolute_Path.'/images/';
            //生成新图片名
            $image = $path.date("YmdHis").rand(1000,9999).".".$hz;
            //创建图片的实例
            $dst = imagecreatefromstring(file_get_contents($dst_path));
            $src = imagecreatefromstring(file_get_contents($src_path));
            //获取水印图片的宽高
            $src_w =80;$src_h=10;
            list($src_w,$src_h) = getimagesize($src_path);
            //如果水印图片本身带透明色,则使用imagecopy方法
            imagecopy($dst, $src, 60,180, 0, 0, $src_w, $src_h);
            //输出图片
            list($src_w, $src_h, $dst_type) = getimagesize($dst_path);
            switch ($dst_type) {
                case 1://GIF
                    imagegif($dst, $image);
                    break;
                case 2://JPG
                    imagejpeg($dst, $image);
                    break;
                case 3://PNG
                //header('Content-Type: image/png');
                    imagepng($dst, $image);
                    break;
                default:
                    break;
            }
            return $image;
        }
    //生成二维码
    $value = 'www.baidu.com';//二维码内容 
    $errorCorrectionLevel = 'L';//容错级别 
    $matrixPointSize = 8;//生成图片大小 
    $QR = 'code.png'; //生成的原始二维码图名
    
        if(!file_exists($QR)){
            images($value,$QR, $errorCorrectionLevel, $matrixPointSize);
        }else{
             echo '图片已经有了';
         }
    
    function images($value,$QR, $errorCorrectionLevel, $matrixPointSize){
        // 加载类库
        include './phpqrcode/phpqrcode.php'; 
        //生成二维码图片 后面三个参数可选
        QRcode::png($value, $QR, $errorCorrectionLevel, $matrixPointSize, 2); 
    
    }


  • 欢迎您
    mysql语句将日期转换为时间戳的方法
    转载 2020-12-11 技术语录

    21

    mysql将日期转换为时间戳更新数据库:

    update test set creattime=UNIX_TIMESTAMP('2018-04-19') 

     

    替换字段为当前日期:

    update test set addtime=UNIX_TIMESTAMP(NOW()) where id=1

     

    对应的日期函数还可以是以下类型,语句中做相应替换就行:

    NOW()函数以`'YYYY-MM-DD HH:MM:SS'返回当前的日期时间,可以直接存到DATETIME字段中。
    CURDATE()以’YYYY-MM-DD’的格式返回今天的日期,可以直接存到DATE字段中。
    CURTIME()以’HH:MM:SS’的格式返回当前的时间,可以直接存到TIME字段中。

    DATE_FORMAT(CREATED_TIME,'%Y-%m-%d %H:%i:%S') CREATED_TIME,页面展示列表时间要DATE_FORMAT转一下(年月日时分秒),

    DATE_FORMAT(CREATED_TIME,'%Y-%m-%d') CREATED_TIME,页面展示列表时间要DATE_FORMAT转一下(年月日)


  • 欢迎您
    move_uploaded_file上传失败及中文乱码解决办法
    转载 2020-11-19 技术语录

    33

    Warning: move_uploaded_file(Discuz X3.2插入新用户.docx) [function.move-uploaded-file]: failed to open stream: Invalid argument in E:\ESSamp\wwwroot\1.php on line 18

    Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move 'E:\ESSamp\PHP5\uploadtemp\php3CE6.tmp' to 'Discuz X3.2插入新用户.docx' in E:\ESSamp\wwwroot\1.phpon line 18


    先本着解决乱码的问题,没想到这个错误也一起解决了,主要是通过iconv()函数进行编码转换,方法如下:


    $_FILES["names"]['name']=iconv("UTF-8","gb2312", $_FILES["names"]['name']);

    move_uploaded_file($_FILES["names"]['tmp_name'],$_FILES["names"]['name']);

    $name=iconv("gb2312","UTF-8", $_FILES["names"]['name']);

    就这样问题解决了。


  • 欢迎您
    linux+apache+ssl配置https
    转载 2020-11-18 技术语录

    25

    最近做小程序需要域名配置https,然后去搜索各种安装方法,经过一天折腾总算是配置好了,网上的方法很多不搭边,在这里总结下,避免踩坑。

    第一步:先看下服务器上有没有ssl模块,在apache的modules目录,里面有很多.so后缀的文件就是了,如果有mod_ssl.so文件代表已经安装了。如果没有,需要cd 进入modules目录,然后下载mod_ssl.so,执行命令 yum install -y mod_ssl  //下载ssl

    第二步:下载证书文件传到服务器上,放哪里没关系,我是新建一个cert文件夹,然后放到里面  /httpd/cert/

    第三步:修改或添加httpd-ssl.conf(提示先备份),一般在/httpd/conf/extra/httpd-ssl.conf,根据操作系统的不同, http-ssl.conf文件也可能存放在conf.d/ssl.conf目录中。

    如果都没有,那就新建一个,内容为:

    <VirtualHost 0.0.0.0:443>
       DocumentRoot "/htdocs/"  #替换为你的网站根目录
       ServerName jiandanji.fun #替换为你的域名
       SSLEngine on
       SSLCertificateFile /etc/httpd/cert/2594646_jiandanji.fun_public.crt #替换成你的证书文件路径
       SSLCertificateKeyFile /etc/httpd/cert/2594646_jiandanji.fun.key #替换成你的密钥文件路径
       SSLCertificateChainFile /etc/httpd/cert/2594646_jiandanji.fun_chain.crt #替换成你的证书密钥文件路径
    </VirtualHost>

    本地编辑好,然后保存上传

    第四步:找到apache配置文件httpd.conf(提示先备份),开启或添加以下配置:

    LoadModule ssl_module modules/mod_ssl.so

    Include /etc/httpd/conf/extra/httpd-ssl.conf

    如果前面有#号,将#去掉,没有就添加这两句

    到这里就配置好了

    重启服务:

    service httpd restart


  • 欢迎您
    http状态码301和302详解及区别
    yunitongxing 2020-11-17 技术语录

    32

    一直对http状态码301和302的理解比较模糊,在遇到实际的问题和翻阅各种资料了解后,算是有了一定的理解。这里记录下,希望能有新的认识。大家也共勉。


    官方的比较简洁的说明:

            301 redirect: 301 代表永久性转移(Permanently Moved)

            302 redirect: 302 代表暂时性转移(Temporarily Moved )

            ps:这里也顺带记住了两个比较相近的英语单词(permanently、temporarily),嘻哈!


            详细来说,301和302状态码都表示重定向,就是说浏览器在拿到服务器返回的这个状态码后会自动跳转到一个新的URL地址,这个地址可以从响应的Location首部中获取(用户看到的效果就是他输入的地址A瞬间变成了另一个地址B)——这是它们的共同点。他们的不同在于。301表示旧地址A的资源已经被永久地移除了(这个资源不可访问了),搜索引擎在抓取新内容的同时也将旧的网址交换为重定向之后的网址;302表示旧地址A的资源还在(仍然可以访问),这个重定向只是临时地从旧地址A跳转到地址B,搜索引擎会抓取新的内容而保存旧的网址。



          这里开启傻瓜自问自答模式(自己可能想到的疑问):

    1、什么是重定向啊?

            就是地址A跳转到地址B啦。百度百科的解释:重定向(Redirect)就是通过各种方法将各种网络请求重新定个方向转到其它位置(如:网页重定向、域名的重定向、路由选择的变化也是对数据报文经由路径的一种重定向)。


    2、可是,为什么要进行重定向啊?什么时候需要重定向呢?

            想跳就跳,就跳的漂亮。还是借鉴百度百科:

    1)网站调整(如改变网页目录结构);

    2)网页被移到一个新地址;

    3)网页扩展名改变(如应用需要把.php改成.Html或.shtml)。

            这种情况下,如果不做重定向,则用户收藏夹或搜索引擎数据库中旧地址只能让访问客户得到一个404页面错误信息,访问流量白白丧失;再者某些注册了多个域名的网站,也需要通过重定向让访问这些域名的用户自动跳转到主站点等。

    3、那么,什么时候进行301或者302跳转呢?

            当一个网站或者网页24—48小时内临时移动到一个新的位置,这时候就要进行302跳转,打个比方说,我有一套房子,但是最近走亲戚去亲戚家住了,过两天我还回来的。而使用301跳转的场景就是之前的网站因为某种原因需要移除掉,然后要到新的地址访问,是永久性的,就比如你的那套房子其实是租的,现在租期到了,你又在另一个地方找到了房子,之前租的房子不住了。

        清晰明确而言:

    使用301跳转的场景:

    1)域名到期不想续费(或者发现了更适合网站的域名),想换个域名。

    2)在搜索引擎的搜索结果中出现了不带www的域名,而带www的域名却没有收录,这个时候可以用301重定向来告诉搜索引擎我们目标的域名是哪一个。

    3)空间服务器不稳定,换空间的时候。

    使用302跳转的场景:

            --尽量使用301跳转!

    4、为什么尽量要使用301跳转?——网址劫持!

            这里摘录百度百科上的解释:

            从网址A 做一个302 重定向到网址B 时,主机 服务器的隐含意思是网址A 随时有可能改主意,重新显示本身的内容或转向其他的地方。大部分的搜索引擎在大部分情况下,当收到302 重定向时,一般只要去抓取目标网址就可以了,也就是说网址B。如果搜索引擎在遇到302 转向时,百分之百的都抓取目标网址B 的话,就不用担心网址URL 劫持了。问题就在于,有的时候搜索引擎,尤其是Google,并不能总是抓取目标网址。比如说,有的时候A 网址很短,但是它做了一个302 重定向到B 网址,而B 网址是一个很长的乱七八糟的URL 网址,甚至还有可能包含一些问号之类的参数。很自然的,A 网址更加用户友好,而B 网址既难看,又不用户友好。这时Google 很有可能会仍然显示网址A。由于搜索引擎排名算法只是程序而不是人,在遇到302 重定向的时候,并不能像人一样的去准确判定哪一个网址更适当,这就造成了网址URL 劫持的可能性。也就是说,一个不道德的人在他自己的网址A 做一个302 重定向到你的网址B,出于某种原因, Google 搜索结果所显示的仍然是网址A,但是所用的网页内容却是你的网址B 上的内容,这种情况就叫做网址URL 劫持。你辛辛苦苦所写的内容就这样被别人偷走了。302 重定向所造成的网址URL 劫持现象,已经存在一段时间了。不过到目前为止,似乎也没有什么更好的解决方法。在正在进行的谷歌大爸爸数据中心转换中,302 重定向问题也是要被解决的目标之一。从一些搜索结果来看,网址劫持现象有所改善,但是并没有完全解决。

            我的理解是,从网站A(网站比较烂)上做了一个302跳转到网站B(搜索排名很靠前),这时候有时搜索引擎会使用网站B的内容,但却收录了网站A的地址,这样在不知不觉间,网站B在为网站A作贡献,网站A的排名就靠前了。

          301跳转对查找引擎是一种对照驯良的跳转编制,也是查找引擎能够遭遇的跳转编制,它告诉查找引擎,这个地址弃用了,永远转向一个新地址,可以转移新域名的权重。而302重定向很容易被搜索引擎误认为是利用多个域名指向同一网站,那么你的网站就会被封掉,罪名是“利用重复的内容来干扰Google搜索结果的网站排名”。

            自问自答模式先告一段落,这里分享下我在 NodeJs中实现跳转的场景:


            之前做过一个重构的项目,由于各种原因,我们的网站的登录以及注册部分需要剥离为另一个网站,域名和之前的不同,所以,我们需要保证旧的地址也能重定向到地址中去,我们就在旧的系统的node层中作了一个重定向,代码类似这样:



    这里没有设置状态码,发现默认是302跳转,然后我们设置了301状态码,类似这样:



    用fiddle抓包(上面的302调整我就不上图了),看到效果:



    以上是使用Express,用nodejs原生的代码实现类似这样:

    转载:https://blog.csdn.net/ai2000ai/article/details/80242193

  • 欢迎您
    CI框架--Excel导入与导出(引入php_Excel这个类)
    转载 2020-11-02 技术语录

    35

    CI框架--Excel导入与导出(引入php_Excel这个类)

    *

         * 导出数据

         */

        public function excel_out(){

            header("Content-type:text/html");

            header("Content-Disposition:attachment;filename=123.xls");

            $array=$this->db->get("city")->result_array();

            $str="id\t"."name\t"."pid\n";

            foreach($array as $val){

                $str.=$val['id']."\t".$val['name']."\t".$val['pid']."\n";

            }

            echo $str;

        }

    //从excel导入到数据表

        public function excel_put(){

            //先做一个文件上传,保存文件

            $path=$_FILES['file'];

            $filePath = "uploads/".$path["name"];

            move_uploaded_file($path["tmp_name"],$filePath);

            //$data=array('B'=>'name','C'=>'pwd','D'=>'money1','E'=>'salt');

            $data=array('B'=>'name','C'=>'pid');

            $tablename='city2';//表名字

            $this->excel_fileput($filePath,$data,$tablename);

        }

        private function excel_fileput($filePath,$data,$tablename){

            $this->load->library("phpexcel");//ci框架中引入excel类

            $PHPExcel = new PHPExcel();

            $PHPReader = new PHPExcel_Reader_Excel2007();

            if(!$PHPReader->canRead($filePath)){

                $PHPReader = new PHPExcel_Reader_Excel5();

                if(!$PHPReader->canRead($filePath)){

                    echo 'no Excel';

                    return ;

                }

            }

            // 加载excel文件

            $PHPExcel = $PHPReader->load($filePath);

            // 读取excel文件中的第一个工作表

            $currentSheet = $PHPExcel->getSheet(0);

            // 取得最大的列号

            $allColumn = $currentSheet->getHighestColumn();

            // 取得一共有多少行

            $allRow = $currentSheet->getHighestRow();

            // 从第二行开始输出,因为excel表中第一行为列名

            for($currentRow = 2;$currentRow <= $allRow;$currentRow++){

                /**从第A列开始输出*/

                //echo $allColumn;

                for($currentColumn= 'A';$currentColumn<= $allColumn; $currentColumn++){

                    $val = $currentSheet->getCellByColumnAndRow(ord($currentColumn) - 65,$currentRow)->getValue();

                    //print_r($val);

                    //die;

                    if($currentColumn == 'A')

                    {

                        //echo $val."\t";

                    }else if($currentColumn <= $allColumn){

                        $data1[$currentColumn]=$val;

                    }

                }

                foreach($data as $key=>$val){

                    $data2[$val]=$data1[$key];

                }

                $this->db->insert($tablename,$data2);

                //print_r($data2);

                //echo "</br>";

            }

            //echo "\n";

            echo "导入成功";

        }


  • 欢迎您
    CodeIgniter (CI)框架中的数据库查询汇总
    转载 2020-11-02 技术语录

    35

    由于poscms是基于CI框架的,所以CI中常见的数据库查询语句是该熟悉一点,所以在这里做个记录。

    //一般查询$this->db->select('name,grade')->where('sex','男')->limit(10,10)->get('tableName')->result();

    一、查询结果集

    ->result();---------------------------------------------------返回object数组(多条记录)

    ->result_array();-------------------------------------------返回二维数组

    ->row();------------------------------------------------------返回一个对象(一条记录)

    ->row_array();----------------------------------------------返回一维数组

    $this->db->insert_id();------------------------------------上一条插入的数据记录的id值(数据插到主表后,立即插到附表的话,id关联的时候回用到)

    二、条件查询

    ->where('name','Jack');-----------------------------------条件是姓名为Jack

    $ids = [1,2,3,4,5]

    ->where_in('id',ids);ids);−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−ids是一个数组

    ->where_not_in('id',$ids);--------------------------------与上对立

    $array array('name !=' => $name'id <' => $id'date >' => $date);

    ->where($array);-------------------------------------------根据多个条件来筛选

    $where "name='Joe' AND status='boss' OR status='active'";

    ->where($where);------------------------------------------根据自定义的sql模式的where语句进行筛选

    ->like('title''match''before');---------------------------模糊匹配,第三个参数可选,不选的话就是下面第三种情况,%match

    ->like('title''match''after');-----------------------------模糊匹配,match%

    ->like('title''match''both');-----------------------------模糊匹配,%match%

    ->not_like('title''match''both')------------------------模糊匹配,与上对立

    $array array('title' => $match'page1' => $match'page2' => $match);

    ->like(array)array)−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−模糊匹配关联数组,match%

    三、distinct去重

    ->select('username,grade')->distinct();---------------根据用户名和成绩去重,只有用户名和成绩都相同才会被去重

    四、排序

    ->order_by('title DESC, name ASC');-----------------title降序name升序

    ->order_by('name','RANDOM');------------------------随机排序,第一个参数无实际意义,但是要写,随机嘛,谈不上根据哪个字段随机了

    五、分页

    ->limit(10);---------------------------------------------------未设置偏移量,那么默认偏移量为0,即从0开始选择,选出10条数据

    ->limit(10,10);-----------------------------------------------设置了偏移量,从10开始,选出10条数据,即11-20条记录

    六、计数

    ->count_all('tableName')---------------------------------查询数据表中总的记录数

    ->where($where)->from('tableName')->count_all_results();查询符合当前条件的记录的数目,注意用from而不是get

    ->where($where)->count_all_results('tableName');效果同上

    七、插入记录

    $data array(

      'title' => 'My title',

      'name'=>'My name',

    );

    ->insert('tableName',$data);-----------------------------往表中插入一条数据

    $data array(

          array(

            'title' => 'My title',

            'name'=>'My name',

          ),

          array(

            'title' => 'My title',

            'name'=>'My name',

          )

    );

    ->insert_batch('tableName',$data);--------------------往表中插入多条记录

    八、更新

    $data array(

      'title' => 'My title',

      'name'=>'My name',

    );

    ->where('id',5)->updata('tableName',$data);--------更新主键(id)为5的记录的相关数据

    九、删除

    $this->db->where('id'$id);

    $this->db->delete('mytable');


  • 欢迎您
    thinkphp5怎么获取项目根目录
    孙小宇 2020-10-26 技术语录

    129

    thinkphp5怎么获取项目根目录和之前的__ROOT__一样

                      THINK_PATH 框架系统目录

                       ROOT_PATH 框架应用根目录

        1. APP_PATH 应用目录(默认为application)

        2. CONF_PATH 配置目录(默认为APP_PATH)

        3. LIB_PATH 系统类库目录(默认为 THINK_PATH.'library/'

        4. CORE_PATH 系统核心类库目录 (默认为 LIB_PATH.'think/'

        5. TRAIT_PATH 系统trait目录(默认为 LIB_PATH.'traits/'

        6. EXTEND_PATH 扩展类库目录(默认为 ROOT_PATH . 'extend/')

        7. VENDOR_PATH 第三方类库目录(默认为 ROOT_PATH . 'vendor/'

        8. RUNTIME_PATH 应用运行时目录(默认为 ROOT_PATH.'runtime/'

        9. LOG_PATH 应用日志目录 (默认为 RUNTIME_PATH.'log/'

        10. CACHE_PATH 项目模板缓存目录(默认为 RUNTIME_PATH.'cache/'

        11. TEMP_PATH 应用缓存目录(默认为 RUNTIME_PATH.'temp/'

        12. 以上是所有的路径常量


        1. 转载于:https://blog.csdn.net/qq_35669659/article/details/80578171

  • 姓名:孙小宇
  • 职业:PHP开发
  • 邮箱:yntx420@163.com
  • 定位:河北 · 张家口
       
  •   总访问量:3.54w+
  •   今日访问量:8.1k+
  •