學習筆記(三)

一.調試模式

    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.pswp.cn/news/256102.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/256102.shtml
英文地址,請注明出處:http://en.pswp.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…