zoukankan      html  css  js  c++  java
  • 学习笔记(三)

    一.调试模式

        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 HomeModel;

          class UserModel extends ThinkModel{

              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('BehaviorTokenBuild'),

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

            // 'view_filter' => array('BehaviorTokenBuildBehavior'),

          );

          '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):

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

        

        驱动扩展  缓存驱动默认位于ThinkCacheDriver命名空间下面 

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

    五.专题

        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 ThinkPage($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 ThinkUpload();// 实例化上传类

          $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 ThinkVerify();

        $Verify->entry();

     

        $image = new ThinkImage();

        $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模式,只需要把控制器继承ThinkControllerRestController即可。继承RestController控制器后你的访问控制器就可以支持下面的一些功能:

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

        namespace HomeController;

        use ThinkControllerRpcController;

        class ServerController extends RpcController{

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

          public function test1(){

              return 'test1';

            }

          public function test2(){

              return 'test2';

            }

          public function test3(){

              return 'test3';

            }

        }

  • 相关阅读:
    深入解析DC/OS 1.8 – 高可靠的微服务及大数据管理平台
    Mesos源码分析
    Openvswitch原理与代码分析(8): 修改Openvswitch代码添加自定义action
    Openvswitch原理与代码分析(7): 添加一条流表flow
    Openvswitch原理与代码分析(6):用户态流表flow table的操作
    Openvswitch原理与代码分析(5): 内核中的流表flow table操作
    Openvswitch原理与代码分析(4):网络包的处理过程
    Openvswitch原理与代码分析(3): openvswitch内核模块的加载
    Openvswitch原理与代码分析(2): ovs-vswitchd的启动
    Openvswitch原理与代码分析(1):总体架构
  • 原文地址:https://www.cnblogs.com/netRob/p/5113058.html
Copyright © 2011-2022 走看看