精华内容
下载资源
问答
  • 使用scss封装函数快速计算rem相对单位
    2019-12-24 18:01:57

    1.有一些编辑器 是可以帮忙计算 rem值  我以前好像用过 不过突然想不起来 

    最近 我要用rem布局书写移动端界面

    本来之前 是用计算机计算相对单位  如果是750标准得设计稿子 还可以 但是 突然给了1080得设计稿 这样的话 你就得转换

    不停的拿着计算器进行计算也是蛮烦人的

    这样就想起来了  预处理语言scss的强大之处

    你可以提前疯转一个函数 然后将测量出来的px值直接传进去让他帮计算 最后传出来一个带着 rem单位的数值 这样就事半功倍了

    2.首先是环境的搭建

    安装 sass 首先你得电脑上有 node 环境 npm环境

    在桌面上新建一个文件夹 

    打开命令行窗口  初始化像项目

    npm  init

    安装scss解析器  node-sass

    npm install node-sass --save

    新建一个scss文件 使用 node-sass的监听机制

    node-sass 1.scss -w css/index.css

    这样就可以实现同步了 你修改1.scss里面的代码自动的更新index.css文件里面的东西

    @function toRem($a){

        @return ($a/100)+rem;  //以750标准设计稿为准

    }

    使用的话  width:toRem(100); 在index.css  就会看见  width:1rem;

    这样 你不用拿着计算器 不停的计算了   也算是省事了不少

    希望能帮到大家把

    更多相关内容
  • 下面我给一些比较常用到的封装函数给大家参考。 (主要都是给自己看的) 1.//获取当前时间 所需头文件: #include #include <QDateTime> QString getdate() { QDateTime current_date_time = QDateTime::...

    **

    更新时间:2021-12-06

    **

    对于一个懒人+健忘症,肯定是把所有常用的函数使用方法记录到小本本上,到时候直接ctrl+f查找使用。哈哈哈

    下面我给一些比较常用到的封装函数给大家参考。
    (主要都是给自己看的)

    1.//获取当前时间

    所需头文件:
    #include < QDateTime>

    QString getdate()
    {
        QDateTime current_date_time = QDateTime::currentDateTime();
        QString date = current_date_time.toString("yyyy-MM-dd hh:mm::ss.zzz");
        qDebug()<<date;
        return date;
    }
    
    

    2.//读取本地配置文件信息–以mysql数据库为例

    所需头文件:
    #include < QSettings>

    QSettings *configIni=new QSettings("./debug/config.ini",QSettings::IniFormat);
    QString address=configIni->value("MysqlMsg/address").toString();
    QString account =configIni->value("MysqlMsg/account").toString();
    QString password =configIni->value("MysqlMsg/password").toString();
    QString dbname =configIni->value("MysqlMsg/dbname").toString();
    int port  =configIni->value("MysqlMsg/port").toInt();
    delete configIni;//读取完成删除指针
    

    路径和名称什么的自己修改

    3.//分割字符串

    所需头文件:
    #include < QList>

    QString str="123;456;";
    QStringList fgMsg=str.split(";");
    QString str2=fgMsg.at(0);
    

    4.//获取本机mac地址

    所需头文件:
    #include < QNetworkInterface>

    QString getmacaddress()
    {
        QList<QNetworkInterface> nets = QNetworkInterface::allInterfaces();// 获取所有网络接口列表
        int nCnt = nets.count();
        QString strMacAddr = "";
        for(int i = 0; i < nCnt; i ++)
        {
            // 如果此网络接口被激活并且正在运行并且不是回环地址,则就是我们需要找的Mac地址
            if(nets[i].flags().testFlag(QNetworkInterface::IsUp) && nets[i].flags().testFlag(QNetworkInterface::IsRunning) && !nets[i].flags().testFlag(QNetworkInterface::IsLoopBack))
            {
                strMacAddr = nets[i].hardwareAddress();
                break;
            }
        }
        return strMacAddr;
    
    }
    

    根据当前网口名,通过配置进行筛选,获取对应的网口mac物理地址
    macType为配置文件的网口名称
    (适用于双网卡的服务器)

    //获取mac地址
    QString getMacAddress()
    {
    //    qDebug()<<"macType:"<<macType;
        QString mac;
        QList<QNetworkInterface> network = QNetworkInterface::allInterfaces();
        foreach (QNetworkInterface i, network)
        {
            QString netName = i.humanReadableName();
    //        qDebug()<<"netName:"<<netName;
            if(netName.compare(macType) == 0)
            {
                mac=i.hardwareAddress();
                mac.replace(":","-");
    
    //            qDebug()<<"mac:"<<i.hardwareAddress();
            }
        }
        return mac;
    }
    

    5.获取时间戳(毫秒级)

    所需头文件:
    #include < QDateTime>
    2种:

    qint64 getunixtime()
    {
    	QString timestamp = QString::number(QDateTime::currentMSecsSinceEpoch());
    	qint64 time= timestamp.toLongLong();
    	return time;
    }
    QString getunixtime()
    {
    	QString timestamp = QString::number(QDateTime::currentMSecsSinceEpoch());
    	return timestamp;
    }
    
    

    6.读取本地图片为base64位图片

    所需头文件:
    pro文件添加QT += gui
    #include < QImage>
    #include < QBuffer>

    QString pictoBase64(const QString & imgPath)
    {
    	QImage image(imgPath);
    	QByteArray ba;
    	QBuffer buf(&ba);
    	image.save(&buf, "jpg");
    	QByteArray hexed = ba.toBase64();
    	buf.close();
    	QString basepic = hexed;
    	return basepic;
    }
    
    

    7.获取当前exe的路径

    所需头文件:
    #include < QCoreApplication>

        QString execurrentPath = QCoreApplication::applicationDirPath();
        qDebug()<<"execurrentPath"<<execurrentPath;
    

    8.单次和多次执行的定时器使用

    所需头文件:
    #include < QTimer>

    //单次执行定时器
    //定时时间-对象-执行的槽函数
    //lamdba
    		QTimer::singleShot(  1000, this, [=] {
    			//想要执行的代码		
    		});
    QTimer::singleShot( 1000, this,SLOT(printMsg());
    
    //多次执行定时器
            timer= new QTimer();
            connect(timer, SIGNAL(timeout()), this, SLOT(槽函数名()));
            timer->start(60 * 1000);//1min
            
    		timer->stop();	//停止定时器
    		delete timer;	//删除定时器指针
    
    
    

    9.打印中文

    所需头文件:
    #include < QDebug>

    	qDebug()<<QString::fromLocal8Bit("中文");
    

    10.判断两个QString是否相等

    QString str = QString::fromLocal8Bit("球形");
    QString str2;
    if(str.compare(QString::fromLocal8Bit("球形") == 0)
    
    if(str.compare(str2) == 0)
     
    或者:
    if(str ==QString::fromLocal8Bit("球形"))
    {
     
    }
    

    11.QProcess调用cmd命令–重启关闭电脑

    所需头文件:
    #include < QProcess >

    
        QProcess p;
        p.start("shutdown -r -t 10");//10s重启电脑
        p.start("shutdown -s -t 10");//10s关闭电脑
        p.waitForStarted();
        p.waitForFinished();
        qDebug()<<QString::fromLocal8Bit(p.readAllStandardOutput());
    
    

    12.QString字符串查找子字符串

    Qt::CaseSensitive 字符大小写敏感(字母分大小写)
    Qt::CaseInsensitive 无大小写敏感 (字母不分大小写)

        QString aa="abc你好";
        if (aa.contains("你好", Qt::CaseSensitive))
        {
            qDebug()<<"123";
        }
    

    13.获取本地文件夹里所有文件名

    QStringList Widget::getLocalFilePicName(QString path)
    {
        QStringList fileNameList;
        QFileInfoList list;
        //判断路径是否存在
        QDir dir(path);
        if(!dir.exists())
        {
            QMessageBox::about(NULL,"tip", "not exist:");
        }else{
            //查看路径中后缀为.cfg格式的文件
            QStringList filer;
            filer << "*.jpg" <<"*.png";//设定需要的文件类型(*为所有类型)
            list = dir.entryInfoList(filer);
            //qDebug()<<"file path:"<<list;
            //get file path
            for(int i=0;i<list.size();i++)
            {
                fileNameList<<list.at(i).filePath();
            }
    
            //get file name
            //        for(int i=0;i<list.size();i++)
            //        {
            //            fileNameList<<list.at(i).fileName();
            //        }
            //        qDebug()<<"file name:"<<fileNameList;
        }
    
        return fileNameList;
    
    }
    

    14.sleep线程睡眠msec

    /*
        函数名:sleep()
        参   数: msec - 单位为毫秒
        描   述: 延时功能
    */
    #include <QTime>
    bool sleep(unsigned int msec)
    {
        QTime dieTime = QTime::currentTime().addMSecs(msec);
    
        while (QTime::currentTime() < dieTime)
        {
            QCoreApplication::processEvents(QEventLoop::AllEvents, 100);
        }
    
        return true;
    }
    

    持续更新~

    不得不说,qt的强大功能真的是太舒服了。
    提供了很多常用的方法,不需要再自己写了。

    展开全文
  • js-wrench 使用TS封装JS常用函数库 不定期更新 Installation In a browser [removed][removed] npm npm install @xqj/util --save
  • 全网最完整的Python操作Excel数据封装函数 1. 写在前面 2. 前期准备 2.1. 初识Excel 2.2. 格式区别 2.3. 库的使用 2.4. 整体思路 3. 代码展示 3.1. xls格式 3.1.1. 读取xls格式文件 3.1.2. 写入xls格式文件 3.1.3. ...

    在这里插入图片描述

    1. 写在前面

    对比其它编程语言,我们都知道Python最大的优势是代码简单,有丰富的第三方开源库供开发者使用。伴随着近几年数据分析的热度,Python也成为最受欢迎的编程语言之一。而对于数据的读取和存储,对于普通人来讲,除了数据库之外,最常见的就是微软的Excel。

    2. 前期准备

    2.1. 初识Excel

    Microsoft Excel是Microsoft为使用Windows和Apple Macintosh操作系统的电脑编写的一款电子表格软件。

    2.2. 格式区别

    Excel中有xls和xlsx两种格式,它们之间的区别是:

    • 文件格式不同。xls是一个特有的二进制格式,其核心结构是复合文档类型的结构,而xlsx的核心结构是XML类型的结构,采用的是基于 XML的压缩方式,使其占用的空间更小。xlsx 中最后一个 x 的意义就在于此。
    • 版本不同。xls是Excel2003及以前版本生成的文件格式,而xlsx是Excel2007及以后版本生成的文件格式。
    • 兼容性不同。xlsx格式是向下兼容的,可兼容xls格式。

    2.3. 库的使用

    当我们要操作xls格式文件时,需要使用到xlrd和xlwt这两个第三方库;当我们要操作xlsx格式文件时,则需要使用到openpyxl第三方库。

    模块来源支持格式
    xlrd第三方库×xls
    xlwt第三方库×xls
    openpyxl第三方库xlsx

    2.4. 整体思路

    当使用以上几个模块的时候,从理论上我们就可以完全操作不同格式的Excel的读和写,很多人就疑惑,那这篇文章的作用是什么?我们直接学习对应的这三个模块不就好了吗?答案就是:虽然这几个库已经把Excel的文件、表、行、列的概念完全转换为Python中的对象,但每次操作都需要遍历每一个单元格,甚至很多时候我们要花费大量的时间在思考循环单元格的边界上,这本身就是在重复造轮子,因此我花了半天时间整理了以下六个函数。

    方法名作用参数参数注释返回值返回值注释
    read_xls_excel读取xls格式Excel数据url,index①文件路径,②工作表序号(第几个工作表,传入参数从1开始数)data表格中的数据
    write_xls_excel写入xls格式Excel数据url,sheet_name,two_dimensional_data①文件路径,②表名,③将要写入表格的数据(二维列表)
    write_xls_excel_add追加写入xls格式Excel数据url, two_dimensional_data, index①文件路径,②将要写入表格的数据(二维列表),③指定要追加的表的序号(第几个工作表,传入参数从1开始数)
    read_xlsx_excel读取xlsx格式Excel数据url,index①文件路径,②工作表序号(第几个工作表,传入参数从1开始数)data表格中的数据
    write_xlsx_excel写入xlsx格式Excel数据url, sheet_name, two_dimensional_data①文件路径,②表名,③将要写入表格的数据(二维列表)
    write_xlsx_excel_add追加写入xlsx格式Excel数据url, sheet_name, two_dimensional_data①文件路径,②表名,③将要写入表格的数据(二维列表)

    3. 代码展示

    3.1. xls格式

    3.1.1. 读取xls格式文件

    '''
    读取xls格式文件
    参数:
        url:文件路径
        index:工作表序号(第几个工作表,传入参数从1开始数)
    返回:
        data:表格中的数据
    '''
    def read_xls_excel(url,index):
        # 打开指定的工作簿
        workbook = xlrd.open_workbook(url)
        # 获取工作簿中的所有表格
        sheets = workbook.sheet_names()
        # 获取工作簿中所有表格中的的第 index 个表格
        worksheet = workbook.sheet_by_name(sheets[index-1])
        # 定义列表存储表格数据
        data = []
        # 遍历每一行数据
        for i in range(0, worksheet.nrows):
            # 定义表格存储每一行数据
            da = []
            # 遍历每一列数据
            for j in range(0, worksheet.ncols):
                # 将行数据存储到da列表
                da.append(worksheet.cell_value(i, j))
            # 存储每一行数据
            data.append(da)
        # 返回数据
        return data
    

    3.1.2. 写入xls格式文件

    '''
    写入xls格式文件
    参数:
        url:文件路径
        sheet_name:表名
        two_dimensional_data:将要写入表格的数据(二维列表)
    '''
    def write_xls_excel(url,sheet_name,two_dimensional_data):
        # 创建工作簿对象
        workbook = xlwt.Workbook()
        # 创建工作表对象
        sheet = workbook.add_sheet(sheet_name)
        # 遍历每一行数据
        for i in range(0,len(two_dimensional_data)):
            # 遍历每一列数据
            for j in range(0,len(two_dimensional_data[i])):
                # 写入数据
                sheet.write(i,j,two_dimensional_data[i][j])
        # 保存
        workbook.save(url)
        print("写入成功")
    

    3.1.3. 追加写入xls格式文件

    '''
    追加写入xls格式文件
    参数:
        url:文件路径
        two_dimensional_data:将要写入表格的数据(二维列表)
        index:指定要追加的表的序号(第几个工作表,传入参数从1开始数)
    '''
    def write_xls_excel_add(url, two_dimensional_data, index):
        # 打开指定的工作簿
        workbook = xlrd.open_workbook(url)
        # 获取工作簿中的所有表格
        sheets = workbook.sheet_names()
        # 获取指定的表
        worksheet = workbook.sheet_by_name(sheets[index-1])
        # 获取表格中已存在的数据的行数
        rows_old = worksheet.nrows
        # 将xlrd对象拷贝转化为xlwt对象
        new_workbook = copy(workbook)
        # 获取转化后工作簿中的第index个表格
        new_worksheet = new_workbook.get_sheet(index-1)
        # 遍历每一行数据
        for i in range(0, len(two_dimensional_data)):
            # 遍历每一列数据
            for j in range(0, len(two_dimensional_data[i])):
                # 追加写入数据,注意是从i+rows_old行开始写入
                new_worksheet.write(i+rows_old, j, two_dimensional_data[i][j])
        # 保存工作簿
        new_workbook.save(url)
        print("追加写入成功")
    

    3.2. xlsx格式

    3.2.1. 读取xlsx格式文件

    '''
    读取xlsx格式文件
    参数:
        url:文件路径
        sheet_name:表名
    返回:
        data:表格中的数据
    '''
    def read_xlsx_excel(url, sheet_name):
        # 使用openpyxl加载指定路径的Excel文件并得到对应的workbook对象
        workbook = openpyxl.load_workbook(url)
        # 根据指定表名获取表格并得到对应的sheet对象
        sheet = workbook[sheet_name]
        # 定义列表存储表格数据
        data = []
        # 遍历表格的每一行
        for row in sheet.rows:
            # 定义表格存储每一行数据
            da = []
            # 从每一行中遍历每一个单元格
            for cell in row:
                # 将行数据存储到da列表
                da.append(cell.value)
            # 存储每一行数据
            data.append(da)
        # 返回数据
        return data
    

    3.2.2. 写入xlsx格式文件

    '''
    写入xlsx格式文件
    参数:
        url:文件路径
        sheet_name:表名
        two_dimensional_data:将要写入表格的数据(二维列表)
    '''
    def write_xlsx_excel(url, sheet_name, two_dimensional_data):
        # 创建工作簿对象
        workbook = openpyxl.Workbook()
        # 创建工作表对象
        sheet = workbook.active
        # 设置该工作表的名字
        sheet.title = sheet_name
        # 遍历表格的每一行
        for i in range(0, len(two_dimensional_data)):
            # 遍历表格的每一列
            for j in range(0, len(two_dimensional_data[i])):
                # 写入数据(注意openpyxl的行和列是从1开始的,和我们平时的认知是一样的)
                sheet.cell(row=i + 1, column=j + 1, value=str(two_dimensional_data[i][j]))
        # 保存到指定位置
        workbook.save(url)
        print("写入成功")
        
    

    3.2.3. 追加写入xlsx格式文件

    '''
    追加写入xlsx格式文件
    参数:
        url:文件路径
        sheet_name:表名
        two_dimensional_data:将要写入表格的数据(二维列表)
    '''
    def write_xlsx_excel_add(url, sheet_name, two_dimensional_data):
        # 使用openpyxl加载指定路径的Excel文件并得到对应的workbook对象
        workbook = openpyxl.load_workbook(url)
        # 根据指定表名获取表格并得到对应的sheet对象
        sheet = workbook[sheet_name]
        for tdd in two_dimensional_data:
            sheet.append(tdd)
        # 保存到指定位置
        workbook.save(url)
        print("追加写入成功")
    

    4. 结果测试

    4.1. 读取测试

    先准备两个Excel文件,如图所示
    在这里插入图片描述
    其内容如下:
    在这里插入图片描述
    在这里插入图片描述
    测试代码:
    在这里插入图片描述
    输出结果:
    在这里插入图片描述
    结论:表明读取并没有问题!!!接下来测试写入

    4.2. 写入测试

    测试代码:
    在这里插入图片描述
    结果输出:
    在这里插入图片描述
    看到数据被覆盖了!!!接下来在上面修改后的数据的基础上测试追加写入

    4.3. 追加写入测试

    测试代码:
    在这里插入图片描述
    结果输出:
    在这里插入图片描述
    追加也没有问题!!

    5. 总结

    我一直认为数据分析就应该以数据为主,而不应该把大量的代码花费在设计Excel表格的样式上,这样多少就有点主客颠倒的意思了。总之,希望这篇文章对正在学习Python的你有一定的帮助,如果对你有帮助的话,不妨点个赞和收藏吧!如果有什么意见和建议也欢迎在评论区留言!

    展开全文
  • php函数封装

    千次阅读 2016-01-20 22:39:01
    这是一些自定义封装的函数类,调用起来很方便,以后会有更多的封装函数更新! // 弹框跳转 function alert($msg,$url=''){ echo ""; echo "alert('$msg');"; if($url){ echo "window.location.href='$url';"; ...

    这是一些自定义封装的函数类,调用起来很方便,以后会有更多的封装函数更新!

    // 弹框跳转
    function alert($msg,$url=''){
       echo "<script>";
       echo "alert('$msg');";
       if($url){
          echo "window.location.href='$url';";
       }else{
          echo "window.history.go(-1);";
       }
       echo "</script>";
    }
    
    
    //获取单条数据
    function getONE($sql){
       $sql = mysql_query($sql);
       $list = array();
       if($sql && mysql_affected_rows()>0){
          $list = mysql_fetch_assoc($sql);
       }return $list;
    }
    
    //获取多条数据
    function getALL($sql){
       $sql = mysql_query($sql);
       $list = array();
       if($sql && mysql_affected_rows()>0){
          while($row = mysql_fetch_assoc($sql)){
          $list[] = $row;
          }
       }return $list;
    }
    
    /**
     * [delete 删除数据]
     * @param  [string] $table [表名]
     * @param  [string] $where [条件]
     * @return [boolean]       [返回结果]
     */
    //删除数据SQL语句封装
    function delete($table,$where){
       //构造删除的SQL语句
       $sql = "DELETE FROM `$table` WHERE $where;";   
       //把SQL语句执行
       $res = mysql_query($sql);
       //判断是否执行成功
       if($res && mysql_affected_rows()>0){
          return true;
       }else{
          return false;
       }
    }
    
    /**
     * [update 更新数据]
     * @param  [string] $table [表名]
     * @param  [array]  $array [要更新的数据]
     * @param  [string] $where [条件]
     * @return [type]        [返回结果]
     */
    //更新数据SQL语句封装
    function update($table,$array,$where){
       $str = '';
       foreach($array as $key => $value){
          $str .= "`".$key."`='".$value."',";
       }
       //去除最右边的逗号
       $str = rtrim($str,',');
       //构造更新的SQL语句
       $sql = "UPDATE `$table` SET $str WHERE $where";
       // dump($sql);exit;
       $res = mysql_query($sql);
       //判断是否执行成功
       if($res){
          return true;
       }else{
          return false;
       }
    }
    
    /**
     * [insert 插入数据]
     * @param  [string] $table [表名]
     * @param  [array] $data  [数据]
     * @return [bool]        [是否成功]
     */
    function insert($table,$data){
       $tmp = array_keys($data);
       $field = '`'.implode('`,`', $tmp).'`';
       $value =  "'".implode("','",$data)."'";
       $sql = "INSERT INTO $table ($field) VALUES ($value)";
       // dump($sql);exit;
       $res = mysql_query($sql);
       if($res && mysql_affected_rows()>0){
          return mysql_insert_id();
       }else{
          return false;
       }
    }
    
    //pre预排版打印
    function dump($content){
       echo "<pre>";
       print_r($content);
       echo "</pre>";
    }
    
    
    /**
     * 
     * 字符截取
     * @param string $string
     * @param int $start
     * @param int $length
     * @param string $charset
     * @param string $dot
     * 
     * @return string
     */
    function str_cut(&$string, $start, $length, $charset = "utf-8", $dot = '...') {
       if(function_exists('mb_substr')) {
          if(mb_strlen($string, $charset) > $length) {
             return mb_substr ($string, $start, $length, $charset) . $dot;
          }
          return mb_substr ($string, $start, $length, $charset);
          
       }else if(function_exists('iconv_substr')) {
          if(iconv_strlen($string, $charset) > $length) {
             return iconv_substr($string, $start, $length, $charset) . $dot;
          }
          return iconv_substr($string, $start, $length, $charset);
       }
    
       $charset = strtolower($charset);
       switch ($charset) {
          case "utf-8" :
             preg_match_all("/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|\xe0[\xa0-\xbf][\x80-\xbf]|[\xe1-\xef][\x80-\xbf][\x80-\xbf]|\xf0[\x90-\xbf][\x80-\xbf][\x80-\xbf]|[\xf1-\xf7][\x80-\xbf][\x80-\xbf][\x80-\xbf]/", $string, $ar);         if(func_num_args() >= 3) {            if (count($ar[0]) > $length) {               return join("", array_slice($ar[0], $start, $length)) . $dot;            }            return join("", array_slice($ar[0], $start, $length));         } else {            return join("", array_slice($ar[0], $start));         }         break;      default:         $start = $start * 2;         $length   = $length * 2;         $strlen = strlen($string);         for ( $i = 0; $i < $strlen; $i++ ) {            if ( $i >= $start && $i < ( $start + $length ) ) {               if ( ord(substr($string, $i, 1)) > 129 ) $tmpstr .= substr($string, $i, 2);               else $tmpstr .= substr($string, $i, 1);            }            if ( ord(substr($string, $i, 1)) > 129 ) $i++;         }         if ( strlen($tmpstr) < $strlen ) $tmpstr .= $dot;                  return $tmpstr;   }}
    
    
    /**
     * [uploads 文件上传函数]
     * @param  [string]  $name    [表单域的name名]
     * @param  [string]  $catalog [文件保存的路径]
     * @param  array   $type    [允许上传的文件类型]
     * @param  integer $size    [允许上传的文件大小]
     * @return [array]           [error 1 上传失败 2 上传成功]
     */
    function uploads($name,$catalog,$type=array('jpg','jpeg','gif','png'),$size=1048576){
        $status = $_FILES[$name]['error'];
        if($status>0){
            switch($status){
                case 1:
                    $res['msg'] = "文件上传超过最大值2M";
                    $res['err'] = 1;
                    return $res;
                    break;
                case 2:
                    $res['msg'] = "文件上传超过MAX_FILE_SIZE大小";
                    $res['err'] = 1;
                    return $res;
                    break;
                case 3:
                    $res['msg'] =  "文件上传失败";
                    $res['err'] = 1;
                    return $res;
                    break;
                case 4:
                    $res['msg'] =  '请选择文件';
                    $res['err'] = 1;
                    return $res;
                    break;
                default:
                    break;
            }
        }
        if($_FILES[$name]['size']>$size){
            $res['msg'] = '上传文件超出指定大小';
            $res['err'] = 1;
            return $res;
        }
    $ext = pathinfo($_FILES[$name]['name'],PATHINFO_EXTENSION);
    
    if(!in_array($ext,$type)){
            $res['msg'] = '请上传指定的文件类型';
            $res['err'] = 1;
            return $res;
        }
    //第一种做法
        $catalog = rtrim($catalog,'/');
        $dir = $catalog;
        if(!is_dir($dir)){
            mkdir($dir,0777,true);
        }
        do{
            $file = time().mt_rand(1000,9999);
    
            $filename = $file.'.'.$ext;
    
            $newname = $dir.'/'.$filename;
    
        }while(is_file($dir.'/'.$filename));
    move_uploaded_file($_FILES[$name]['tmp_name'], $dir.'/'.$filename);
        $res['msg'] = '文件上传成功';
        $res['err'] = 2;
        $res['filename'] = $filename;
        $res['name'] = $filename;
        return $res;
    }
    
    
    
    
    
    
    //封装缩略图的函数
    function small($file,$widths,$heights,$address){
       $filename="$file";
       $info = getimagesize($filename);
    
       //获取图片的宽
       $width = $info[0];
       //获取图片的高
       $height = $info[1];
    
       //打开图片
       if($info[2]==1){
          $parent = imagecreatefromgif($filename);
       }else if($info[2]==2){
          $parent = imagecreatefromjpeg($filename);
       }else if($info[2]==3){
          $parent = imagecreatefrompng($filename);
       }
    
       $son_width = $widths;
       $son_height = $heights;
       // 等比例缩放
       // $son_height = ceil(($height*$son_width)/$width);
    
       //w/h = s_w/s_h
       //新建图像
       $son = imagecreatetruecolor($son_width,$son_height);
       
       imagecopyresized($son,$parent,0,0,0,0,$son_width,$son_height,$width,$height);
       $path = pathinfo($filename,PATHINFO_EXTENSION);
       $time = time();
       $pathname = $time.mt_rand(1000,9999).'.'.$path;
    
       $save = $address.$pathname;
       if($info[2]==1){      imagegif($son,$save);   }else if($info[2]==2){      imagejpeg($son,$save);   }else if($info[2]==3){      imagepng($son,$save);   }   imagedestroy($son);   imagedestroy($parent);   return $pathname;   }
    
    /**
     * 获得用户的真实IP地址
     *
     * @access  public
     * @return  string
     */
    function real_ip()
    {
        static $realip = NULL;
    
        if ($realip !== NULL)
        {
            return $realip;
        }
    
        if (isset($_SERVER))
        {
            if (isset($_SERVER['HTTP_X_FORWARDED_FOR']))
            {
                $arr = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
    
                /* 取X-Forwarded-For中第一个非unknown的有效IP字符串 */
                foreach ($arr AS $ip)
                {
                    $ip = trim($ip);
    
                    if ($ip != 'unknown')
                    {
                        $realip = $ip;
    
                        break;
                    }
                }
            }
            elseif (isset($_SERVER['HTTP_CLIENT_IP']))
            {
                $realip = $_SERVER['HTTP_CLIENT_IP'];
            }
            else
            {
                if (isset($_SERVER['REMOTE_ADDR']))
                {
                    $realip = $_SERVER['REMOTE_ADDR'];
                }
                else
                {
                    $realip = '0.0.0.0';
                }
            }
        }
        else
        {
            if (getenv('HTTP_X_FORWARDED_FOR'))
            {
                $realip = getenv('HTTP_X_FORWARDED_FOR');
            }
            elseif (getenv('HTTP_CLIENT_IP'))
            {
                $realip = getenv('HTTP_CLIENT_IP');        }        else        {            $realip = getenv('REMOTE_ADDR');        }    }    preg_match("/[\d\.]{7,15}/", $realip, $onlineip);    $realip = !empty($onlineip[0]) ? $onlineip[0] : '0.0.0.0';    return $realip;}
    
    /**
     * [arraySort 无限极分类函数]
     * @param  [type]  $arr      [description]
     * @param  integer $parentid [description]
     * @return [type]            [description]
     */
    function arraySort($arr,$id,$pid,$parentid=0){
       $list=array();
       foreach($arr as $key => $v){
          if($v[$pid]==$parentid){
             $tmp = arraySort($arr,$id,$pid,$v[$id]);
             if($tmp){
                $v['submenu'] = $tmp;
             }
             $list[]=$v;
          }
       }
       return $list;
    }
    
    

    展开全文
  • 1、模拟后端接口可参考网站整站开发小例子,在打开命令窗口并转到所在项目文件夹下在命令行中输入npm install express –save,安装express中间件。 2、把当中的app.js的内容换成 var express=require('express')...
  • save_file(boy,girl,count) #调用第一个封装函数 boy =[] girl = [] count +=1 save_file(boy,girl,count) #调用第一个封装函数 f.close() split_file('test.txt') #调用第二个函数 ...
  • 本文实例讲述了Yii框架函数简单用法。分享给大家供大家参考,具体如下: 1.redict return $this->redirect(['login']); redict其实是对于以下的封装 等同于 $response=Yii::app->response(); $response->headers...
  • 在工作中经常会频繁使用一些方法、或做类型判断、数据转换等,为了方便,将一些功能封装函数整理成工具集lao-utils 使用 Node.js npm install lao-utils --save AMD/CMD、浏览器环境 引入dist目录下源码文件 ...
  • JPA中save方法

    千次阅读 2021-07-15 09:52:51
    今天在阅读代码的过程中,看到测试中的代码如下 User testSave3 = User.builder().name("testSave3... userDao.save(testSave3); log.debug("【testSave2.getId】 = {}",testSave3.getId()); Assert.assertNotNull(t
  • delphi 封装函数

    千次阅读 2013-10-20 13:51:39
    // 根据字符串,拆分字符串,相当于vb中的split函数 function SplitString(const Source, ch: string): TStringList; var temp: String; i: Integer; begin Result := TStringList.Create; // 如果是空自符串则...
  • 1,首先新建一个jsonp.js 封装一个函数方法。当然前提要在项目中安装jsonp 的依赖,npm install jsonp --save 看下面代码,解释一下,先引入jsonp,接着写了2个函数,一个是jsonp(),另一个是para
  • 防抖节流函数是什么 防抖:触发高频事件后 n 秒内函数只会执行一次,如果 n 秒内高频事件再次被触发,则重新计算时间。通俗来说就是n个事件发生了,我只认最后一次。比如一个需求,一个输入框,当我输入内容之后会...
  • 1.题目要求:定义一个Student类,包含名字一个数据成员,定义无参构造函数、有参构造函数、拷贝构造函数、析构函数及对于名字的封装函数,在main函数中实例化Student对象,并访问相关函数,观察运行结果。...
  • 一、简单封装: def save_img(self,fname): return self.driver.save_screenshot(path+"/result/img/"+fname+".png") for i in range(4): self.save_img(sys._getframe().f_code.co_name+str(i)) 1.截图API:d....
  • axios使用及封装

    千次阅读 2020-12-27 22:00:07
    axios跨域及封装 1、安装 npm install axios --save 2、main.js引用 import axios from 'axios'; 3、axios基本用法 function get(){ //axios.get('http://localhost:3000/post?id=1') axios({ url:'/posts', ...
  • 我使用的模型是自定义模型,而不是使用keras.model中的Sequential()封装函数,所以不能使用model.save(‘xxx.h5’)对模型进行保存,只能通过tf.saved_model或者是save_weights来保存。 这次我同样是搭建GAN网络来...
  • 带有要封装的方法和数据成员的对象作为第一个参数传入函数privatize(target [, prefix]) 。 在下面的例子中,原型被传入。前缀是放在私有成员前面的字符。 默认为单个下划线。 调用privatize()后删除前缀。 var ...
  • 今天自己用tf2搭建框架完成PassGAN网络,终于把模型和训练算法都完成了,效果也不错的时候,突然发现使用tf.saved_model.save保存模型会报错,而且错误很离谱,基本上无法debug的那种,令人十分头疼。 首先介绍一下...
  • npm install react-map-bdmap --save API 属性 描述 类型 默认值 AK 秘钥 string 无 coords 坐标 array [] showMarker 展示提示信息 boolean false showInfoWindow 信息窗口 func 返回 html字符串,请用es6模板字符...
  • 前段时间工作原因接触到需要保存远程图片,尝试了几种方法,最后总结封装出来了一个函数,可适应任何远程图片,代码如下: /** * $url 目标网址 * $filename 保存文件名 * $savefile 保存文件路径...
  • npm install animator-clip --save import AnimatorClip from "animator-clip" 动画剪辑 ♡animator和剪辑对象 const {Animator,Clip} = AnimatorClip; 创建animator实例 //animator实例在创建时,构造函数包含el和...
  • Thinkphp 批量更新方法 saveALL

    千次阅读 2017-12-26 16:57:00
    批量更新只适用于一个字段的更新,原理是用自定义函数拼接sql语句,然后再执行sql语句.   //数据 $data[]=array('id'=>1,'value'=>value1); $data[]=array('id'=>2,'value'=>value2); $data[]=...
  • matplotlib.pyplot常用画图方式函数封装(一)——.plot绘制折线图及设置坐标轴箭头完美解决py.plot常见绘图设置函数封装绘制函数图像(完美解决坐标轴添加箭头)绘制折线图 py.plot常见绘图设置函数封装 本文主要...
  • WLAN power save

    千次阅读 2018-08-15 11:45:35
    通常,当AP或STA从协议栈收到报文(MSDU)时,会打上Ethernet报文头,称之为AMSDUSubframe,而A-MSDU技术旨在将若干个A-MSDUSubframe按照802.11协议格式,封装成一个MPDU报文单元,即是A_MPDUSubframe,见下图: ...
  • 本程序封装了C#下XML文件的加载和保存,可以实现对类对象的直接操作,类属性支持:通用变量、列表、列表对象等,在PubXML.cs文件中封装两个函数SaveXML和ReadXML,并且文件中给出了类的声明举例和函数调用举例,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 66,350
精华内容 26,540
关键字:

封装函数save