学习笔记(三)

一.调试模式

    define('APP_DEBUG', true);

    调试模式的优势在于:
    •   开启日志记录,任何错误信息和调试信息都会详细记录,便于调试;
    •   关闭模板缓存,模板修改可以即时生效;
    •   记录SQL日志,方便分析SQL;
    •   关闭字段缓存,数据表字段修改不受缓存影响;
    •   严格检查文件大小写(即使是Windows平台),帮助你提前发现Linux部署可能导致的隐患问题;
    •   通过页面Trace功能更好的调试和发现错误; 
    •   'SHOW_ERROR_MSG' => true, // 显示错误信息

        'SHOW_ERROR_MSG' => false,

        'ERROR_MESSAGE' => '发生错误!'

        'ERROR_PAGE' =>'/Public/error.html'

        'LOG_RECORD' => true, // 开启日志记录

        'LOG_LEVEL' =>'EMERG,ALERT,CRIT,ERR', // 只记录EMERG ALERT CRIT ERR 错误

        // 显示页面Trace信息

        'SHOW_PAGE_TRACE' =>true,断点调试,可用trace()方法

        变量调试     dump()方法

        性能调试   G()方法

        错误调试   E()方法

        模型调试   getLastSql()方法  getDbError()方法

二.数据缓存

    缓存类型包括:Apachenote、Apc、Db、Eaccelerator、File、Memcache、Redis、Shmop、Sqlite、Wincache和Xcache

    S(array(

        'type'=>'memcache',

        'host'=>'192.168.1.10',

        'port'=>'11211',

        'prefix'=>'think',

        'expire'=>60)

        );

    快速缓存Data数据,保存到指定的目录      F('data',$Data,TEMP_PATH);

    查询缓存    $Model->cache('cache_name')->select();    $value = S('cache_name');

    SQL解析缓存  'DB_SQL_BUILD_CACHE' => true,

    静态缓存    'HTML_CACHE_ON' => true, // 开启静态缓存

            'HTML_CACHE_TIME' => 60, // 全局静态缓存有效期(秒)

            'HTML_FILE_SUFFIX' => '.shtml', // 设置静态缓存文件后缀

            'HTML_CACHE_RULES' => array( // 定义静态缓存规则

              // 定义格式1 数组方式

              '静态地址' => array('静态规则', '有效期', '附加规则'),

              // 定义格式2 字符串方式

              '静态地址' => '静态规则',

              )

三.安全

    输入过滤

      使用系统内置的I函数是避免输入数据出现安全隐患的重要手段,I函数默认的过滤方法是htmlspecialchars

      I('get.title','','strip_tags'); // 用strip_tags过滤$_GET['title']

      $this->data($data)->filter('strip_tags')->add();

   表单合法性检测   

      namespace Home\Model;

      class UserModel extends \Think\Model{

          protected $insertFields = array('account','password','nickname','email');

          protected $updateFields = array('nickname','email');

      }

      在使用的时候,我们调用create方法的时候,会根据提交类型自动识别insertFields和updateFields属性

      M('User')->field('account,password,nickname,email')->create();

    表单令牌

      在应用或者模块的配置目录下面的行为定义文件tags.php中

      return array(

        // 添加下面一行定义即可

        'view_filter' => array('Behavior\TokenBuild'),

        // 如果是3.2.1版本 需要改成

        // 'view_filter' => array('Behavior\TokenBuildBehavior'),

      );

      'TOKEN_ON' => true, // 是否开启令牌验证 默认关闭

      'TOKEN_NAME' => '__hash__', // 令牌验证的表单隐藏字段名称,默认为__hash__

      'TOKEN_TYPE' => 'md5', //令牌哈希验证规则 默认为MD5

      'TOKEN_RESET' => true, //令牌验证出错后是否重置令牌 默认为true

      模型类在创建数据对象的同时会自动进行表单令牌验证操作,如果你没有使用create方法创建数据对象的话,则需要手动调用模型的autoCheckToken方法进行表单令牌验证。如果返回false,则表示表单令牌验证错误

    防止SQL注入  

      系统会对数据进行强制的数据类型检测,并且对数据来源进行数据格式转换    escape_string

      $Model->where("id=%d and username='%s' and xx='%f'",array($id,$username,$xx))->select();

    

    • 对所有公共的操作方法做必要的安全检查,防止用户通过URL直接调用;
    • 不要缓存需要用户认证的页面;
    • 对用户的上传文件,做必要的安全检查,例如上传路径和非法格式;
    • 如非必要,不要开启服务器的目录浏览权限;
    • 对于项目进行充分的测试,不要生成业务逻辑的安全隐患(这可能是最大的安全问题);
    • 最后一点,做好服务器的安全防护;

 

四.类库扩展

    公共类库   指ThinkPHP/Library目录下面的类库

           如果你的类库没有采用命名空间的话,需要使用import方法先加载类库文件,然后再进行实例化,例如:我们定义了一个Counter类(位于Com/Sina/Util/Counter.class.php):

    应用类库  在应用或者模块目录下面的类库

    

    驱动扩展  缓存驱动默认位于Think\Cache\Driver命名空间下面 

          提供了包括APC、Db、Memcache、Shmop、Sqlite、Redis、Eaccelerator和Xcache缓存方式的驱动扩展,缓存驱动必须继承Think\Cache类,并实现下面的驱动接口:

五.专题

    session(array('name'=>'session_id','expire'=>3600));  session('name',null); // 删除name   session(null); // 清空当前的session

    session('[pause]'); // 暂停session写入

    session('[start]'); // 启动session

    session('[destroy]'); // 销毁session

    session('[regenerate]'); // 重新生成session id

 

    $User = M('User'); // 实例化User对象

    $count = $User->where('status=1')->count();// 查询满足要求的总记录数

    $Page = new \Think\Page($count,25);// 实例化分页类 传入总记录数和每页显示的记录数(25)

    $show = $Page->show();// 分页显示输出

    // 进行分页数据查询 注意limit方法的参数要使用Page类的属性

    $list = $User->where('status=1')->order('create_time')->limit($Page->firstRow.','.$Page->listRows)->select();

    $this->assign('list',$list);// 赋值数据集

    $this->assign('page',$show);// 赋值分页输出

    $this->display(); // 输出模板

 

    public function upload(){

      $upload = new \Think\Upload();// 实例化上传类

      $upload->maxSize = 3145728 ;// 设置附件上传大小

      $upload->exts = array('jpg', 'gif', 'png', 'jpeg');// 设置附件上传类型

      $upload->savePath = './Public/Uploads/'; // 设置附件上传目录

      // 上传文件

      $info = $upload->upload();

      if(!$info) {// 上传错误提示错误信息

        $this->error($upload->getError());

      }else{// 上传成功

        $this->success('上传成功!');

      }

    }

 

    $Verify = new \Think\Verify();

    $Verify->entry();

 

    $image = new \Think\Image();

    $image->open('./1.jpg');

    $width = $image->width(); // 返回图片的宽度

    $height = $image->height(); // 返回图片的高度

    $image->crop(400, 400)->save('./crop.jpg');

    $image->thumb(150, 150)->save('./thumb.jpg');

 

    REST(Representational State Transfer表述性状态转移)是一种针对网络应用的设计和开发方式,可以降低开发的复杂性,提高系统的可伸缩性。REST提出了一些设计概念和准则:

      1、网络上的所有事物都被抽象为资源(resource);

      2、每个资源对应一个唯一的资源标识(resource identifier);

      3、通过通用的连接器接口(generic connector interface)对资源进行操作;

      4、对资源的各种操作不会改变资源标识;

      5、所有的操作都是无状态的(stateless)。需要注意的是,REST是设计风格而不是标准。

  

    RESTFul支持更为灵活,你不需要使用REST模式,只需要把控制器继承Think\Controller\RestController即可。继承RestController控制器后你的访问控制器就可以支持下面的一些功能:

    •   支持资源类型自动检测;
    •   支持请求类型自动检测;
    •   RESTFul方法支持;
    •   可以设置允许的请求类型列表;
    •       可以设置允许请求和输出的资源类型;
    •       可以设置默认请求类型和默认资源类型; 

    namespace Home\Controller;

    use Think\Controller\RpcController;

    class ServerController extends RpcController{

    protected $allowMethodList = array('test1','test2');

      public function test1(){

          return 'test1';

        }

      public function test2(){

          return 'test2';

        }

      public function test3(){

          return 'test3';

        }

    }

 

转载于:https://www.cnblogs.com/netRob/p/5113058.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/256102.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【项目实战】——Python打包正装换底色代码为exe文件(可在其他无Python环境下运行)

目录 1.安装pyinstaller 2.生成.exe文件 方法1: 方法2: 方法3: (1)使用命令行窗口进入项目的根目录 (2)在改目录下执行pyi-makespec main.py(main.py是你的主入口文件&#x…

C++STL总结笔记(三)—— 常见算法

文章目录一、基本概念二、程序示例1.遍历2. 查找3. 排序、拷贝、替换4. numeric相关算法总结一、基本概念 算法是STL中很重要的一部分,其功能包括比较,查找,排序,交换,遍历,复制等等。 最大的算法头文件是…

Java zip解压,并遍历zip中的配置文件 .cfg或.properties

1.解析cfg或properties配置文件 讲配置文件&#xff0c;读取&#xff0c;并封装成为map类型数据 /*** 解析cfg文件** param cfgFile* return*/public static Map<String, Object> readCfg(FileInputStream cfgFile) {Properties prop new Properties();Map<String, O…

db2 常用配置

db2set配置&#xff1a; db2set DB2_ENABLE_LDAPNO db2set DB2_ALTERNATE_GROUP_LOOKUPGETGROUPLIST db2set DB2_RESTORE_GRANT_ADMIN_AUTHORITIESON db2set DB2_SKIPINSERTEDON db2set DB2_LOAD_COPY_NO_OVERRIDENONRECOVERABLE db2set DB2_EVALUNCOMMITTEDON db2set DB2_SKIP…

安装完最小化 RHEL/CentOS 7 后需要做的 30 件事情(三)码农网

12. 安装 Apache Tomcat Tomcat 是由 Apache 设计的用来运行 Java HTTP web 服务器的 servlet 容器。按照下面的方法安装 tomcat&#xff0c;但需要指出的是安装 tomcat 之前必须先安装 Java。 # yum install tomcat 安装 Apache Tomcat 安装完 tomcat 之后&#xff0c;启动 to…

【图像处理】——图像特效处理(马赛克、图像融合、毛玻璃等)

参考:https://blog.csdn.net/qq_43328040/article/details/109081414 import cv2 import numpy as np import random#马赛克:将一定大小窗口的RGB设置成一个颜色 def horseBox(img):row,col,chal = img.shapeboxRow = int(0.3*row)boxcol = int(0.3*col)for m in range(50,b…

JDK5.0新特性之:泛型

文/陈刚 2005-11-09 一、前言 泛型这个词在现在的JAVA挺时髦&#xff0c;光从字面上你是无法知道它代表些什么东东的&#xff0c;所以我们还是不要从字面去理解&#xff0c;而是从一些实例去了解它吧。 二、泛型之前的日子 &#xff2a;&#xff24;&#xff2b;&#xff11;.…

QT5.14.2基于PCL1.11.1显示点云(基于Windows VS2019开发环境)

文章目录一、安装1.1 PCL安装1.2 QT安装1.3 VTK编译二、程序配置1. 基于mscv创建QT的程序2. 配置QT工程文件和依赖项3. 编写点云显示的小程序总结一、安装 1.1 PCL安装 PCL1.11.1库的安装网上教程很多&#xff0c;推荐一个很好的教程&#xff1a; Win10 系统下 VisualStudio2…

Spring学习笔记—最小化Spring XML配置

自动装配(autowiring)有助于减少甚至消除配置<property>元素和<constructor-arg>元素&#xff0c;让Spring自动识别如何装配Bean的依赖关系。 自动检测(autodiscovery)比自动装配更进了一步&#xff0c;让Spring能够自动识别哪些类需要被配置成Spring Bean&#xf…

【数据结构】——快速排序

目录 一、代码 二、复杂度&#xff1a;O(nlog(n)) 三、快速排序的劣势 视频参考链接&#xff1a;https://www.bilibili.com/video/BV1mp4y1D7UP?p17 一、代码 思想&#xff1a;假设是对一个list进行排序 1、选取第一个元素作为p元素&#xff1b; 2、将p元素归位&#xff0…

读取数据库信息构建视图字段的备注信息,方便程序代码生成

在很多情况下&#xff0c;我们开发都需要有一个快速的代码生成工具用来提高开发效率&#xff0c;代码生成工具很多信息都是读取数据库的表、视图等元数据进行对象表信息的完善&#xff0c;有了这些信息&#xff0c;我们就可以在普通的实体类代码里面添加属性字段的中文注释&…

Ubuntu DNS bind9 配置

下面的配置就是实现解析test.zp.com到不同的IP地址 安装dns server软件包$ apt-get install bind9 配置dns配置文件的路径在/etc/bind路径下面添加一个zone$ /etc/bind# vim /etc/bind/named.conf.local 添加下面&#xff0c;语法可以参照/etc/bind/zones.rfc1918中的语法添加&…

微博分享错误

昨天再做这块的时候&#xff0c;不知怎么的点击之后什么反应都没有&#xff0c;程序也没有崩&#xff0c;日志倒是输出了这个错误 解决办法&#xff1a;打开你写分享的代码跟API文档对比一下创建文本、图片或者网页的时候是不是少写了那个属性&#xff0c;我这里是在创建网页的…

C++总结笔记(十二)—— 智能指针

文章目录前言一、智能指针是什么&#xff1f;二、示例总结前言 C对于内存管理的要求很高&#xff0c;如果不及时释放对象内存&#xff0c;就可能会发生内存泄露或野指针等情况&#xff0c;鉴于这种情况&#xff0c;C11提出了智能指针的概念。 一、智能指针是什么&#xff1f;…

代码生成工具之界面快速生成

界面开发&#xff0c;无论对于Web开发&#xff0c;还是Winform开发&#xff0c;都需要耗费一定的时间&#xff0c;特别对于一个数据库字段比较多的界面&#xff0c;一般就需要在编辑界面上摆的更多的控件来做数据显示&#xff0c;每次碰到这个&#xff0c;都有点头痛&#xff0…

javascript - 封装原生js实现ajax

1 /*2 * ajax方法3 */4 var Ajax function() {5 var that this;6 //创建异步请求对象方法7 that.createXHR function() {8 if(window.XMLHttpRequ…

QT对象树、信号和槽机制

文章目录一 、对象树是什么&#xff1f;二、信号和槽的基本概念2.1 信号2.2 槽2.3 松散耦合2.4 特点三、示例总结一 、对象树是什么&#xff1f; 对象树是由父类和若干子类对象组成&#xff0c;而子类也可以由若干孙类。 QT中的对象树是以QObject为起始父类来完成树的构建的&a…

【数据结构】——归并排序

目录 一、代码 二、随笔 一、代码 归并排序的主要思路&#xff1a;将两个有序的子列表归并为一个有序的大列表 #归并函数&#xff0c;假设li是由左右两个有序的子列表组成,假设两个子列表都是从小到大排好序的列表 def merge(li,low,mid,high)::param li: 由左右两个有序的子列…

开发发布npm module包

开发发布npm module包 问题 在项目开发过程中&#xff0c;每当进入一个新的业务项目&#xff0c;从零开始搭建一套前端项目结构是一件让人头疼的事情&#xff0c;就要重新复制一个上一个项目的前端框架和组件代码库。其中很多功能的模块组件都要重复拷贝&#xff0c;可以统一将…

如何使用ATS提高应用的安全性

App Transport Security&#xff0c;简短的说就是ATS&#xff0c;是iOS9和OS X El Capitan的一个新特性。App Transport Security 的目标是提高Apple 操作系统的安全性以及在此操作系统上运行的任何应用的安全性。 基于HTTP传输数据的网络请求都是明文。开启App Transport Secu…