博客列表 >thinkphp最近总结

thinkphp最近总结

family的博客
family的博客原创
2019年10月26日 11:07:211057浏览

1.在数据库设计中,有金额一类的数据最好设为double型,之前遇到过设为float型数据取出时自动取整的情况,一般来说double型比float占用内存高,但是更加精确。

关于同时插入上百万条数据的代码优化:

2.1 第一种方法:使用insert into 插入,代码如下:

$params = array(‘value'=>'50′);

set_time_limit(0);

echo date(“H:i:s”);

for($i=0;$i<2000000;$i++){

$connect_mysql->insert($params);

};

echo date(“H:i:s”);最后显示为:23:25:05 01:32:05 也就是花了2个小时多!

2.2第二种方法:使用事务提交,批量插入数据库(每隔10W条提交下)最后显示消耗的时间为:22:56:13 23:04:00 ,一共8分13秒  ,代码如下:

        

echo date(“H:i:s”);

$connect_mysql->query(‘BEGIN');

$params = array(‘value'=>'50′);

for($i=0;$i<2000000;$i++){

$connect_mysql->insert($params);

if($i%100000==0){

$connect_mysql->query(‘COMMIT');

$connect_mysql->query(‘BEGIN');

}

}

$connect_mysql->query(‘COMMIT');

echo date(“H:i:s”);

2.3

第三种方法:使用优化SQL语句:将SQL语句进行拼接,使用 insert into table () values  (),(),(),()然后再一次性插入,如果字符串太长,

则需要配置下MYSQL,在mysql 命令行中运行 :set global max_allowed_packet =  2*1024*1024*10;消耗时间为:11:24:06 11:25:06;

插入200W条测试数据仅仅用了1分钟!代码如下:

$sql= “insert into twenty_million (value) values”;

for($i=0;$i<2000000;$i++){

$sql.=”('50′),”;

};

$sql = substr($sql,0,strlen($sql)-1);

$connect_mysql->query($sql);

广泛使用的是第二种,处理速度最快是第三种。

原文链接:https://www.jb51.net/article/51975.htm

3.thinkphp phpExecl的一些参数设置:https://blog.csdn.net/weixin_30672295/article/details/94887628

4.值得一提的是php版本5.5之后才有array_column函数,如果想使用则在common.php中添加:

function array_column($array,$column_name)

    {


        return array_map(function($element) use($column_name){return $element[$column_name];}, $array);


    }

5.处理上传base64图片的方法

 public function uploadImg($file)

    {

            if ($file) {

                $bb=explode(";",$file['content']);

                $i=0;

                if($bb[0]=="data:image/gif"||$bb[0]=="data:image/png"||$bb[0]=="data:image/jpg"||$bb[0]=="data:image/jpeg"){

                    if($bb[0]=="data:image/png"){

                        $hou=".png";

                    }

                    if($bb[0]=="data:image/gif"){

                        $hou=".gif";

                    }

                    if($bb[0]=="data:image/jpg"){

                        $hou=".jpg";

                    }

                    if($bb[0]=="data:image/jpeg"){

                        $hou=".jpeg";

                    }

                    $i+=1;

                }else{

                    return ['code'=>0,"msg"=>"图片格式不正确"];

                }

               //  $a=0;

               // if($data['size']<=2097152){

               //    $a+=1;

               // }else{

               //     return ['code'=>0,"msg"=>"图片大小大于2M"];

               // }

               $fileName=ROOT_PATH . 'public' . DS . 'uploads';

               $savename=time();

                if($a+$i>=2){

                    $uploadUrl =  ROOT_PATH . 'public' . DS . 'uploads';

                    $info = $this->base64_image_content($file['content'],$uploadUrl);

                }

            return json($info);

    }

    public function base64_image_content($base64_image_content,$path){

        //匹配出图片的格式

        if (preg_match('/^(data:\s*image\/(\w+);base64,)/', $base64_image_content, $result)){

            $type = $result[2];

            $new_file = $path."/".date('Ymd',time())."/";

            $basePutUrl = $new_file;

            if(!file_exists($basePutUrl)) {

                //检查是否有该文件夹,如果没有就创建,并给予最高权限

                $a = mkdir($basePutUrl, 0700);

            }

            $ping_url = time().".{$type}";

            $local_file_url = $basePutUrl.$ping_url;

            if (file_put_contents($local_file_url, base64_decode(str_replace($result[1], '', $base64_image_content)))){

                return date('Ymd',time())."/".$ping_url;

            }else{

                return false;

            }

        }else{

            return false;

        }

    }

6.thinkphp+vue前后端分离的方法:

将vue生成的压缩包放到public文件夹下,设置入口文件index.html的优先级高于index.php


声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议