日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

学习笔记(三)

發布時間:2023/12/13 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 学习笔记(三) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一.調試模式

    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

總結

以上是生活随笔為你收集整理的学习笔记(三)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。