tp 框架開發(fā)整理總結(jié)

tp 框架開發(fā)整理總結(jié)

tp3.2文檔?http://www.php.cn/xiazai/shouce/31

大寫字母的用法A函數(shù)用于實(shí)例化控制器格式:[資源://][模塊/]控制器 A($name,$layer=”,$level=”)@param?string?$name?資源地址 @param?string?$layer?控制層名稱 @param?integer?$level?控制器層次 @return?Controller|false


B執(zhí)行某個(gè)行為 B($name,$tag=”,&$params=NULL)

@param string $name 行為名稱 @param string $tag 標(biāo)簽名稱(行為類無需傳入) @param Mixed $params傳入的參數(shù) @return void

這是隨著行為應(yīng)運(yùn)而生的新生函數(shù),可以執(zhí)行某個(gè)行為,例如B(‘app_begin’);
就是在項(xiàng)目開始之前,執(zhí)行這個(gè)行為定義的所有函 數(shù),支持2個(gè)參數(shù),第二個(gè)參數(shù)支持需要接受一個(gè)數(shù)組

例如

B('app_begin',Array("name"=>"tdweb","time"=>time()));

C 讀取及設(shè)置配置參數(shù)C($name=null,$value=null,$default=null)

@paramstring|array $name 配置變量 @param mixed $value 配置值 @param mixed $default 默認(rèn)值 @return mixed

獲取值:  

  • 獲取所有設(shè)置:C(); 不傳遞任何參數(shù),返回一個(gè)包含所有設(shè)置的數(shù)組。
  • 獲取指定配置:C(‘URL_MODEL’) 這樣就能得到URL_MODEL的配置信息
  • 獲取指定二維數(shù)組配置:C(“array.name”),這樣就返回?cái)?shù)組array下的key為name所對(duì)應(yīng)的值

設(shè)置值:

  • 為二維數(shù)組賦值C(“array.name”,”value”),原理同上(獲取array.name的值),后邊的value是值
  • 批量賦值:
    $test=array("URL_MODEL"=>1,"THIN_MODEL"=>true"); C($test);  這樣直接將數(shù)組里的值賦值了

    判斷是否賦值:

    C("?URL_MODEL")這樣前邊加個(gè)"?",如果已經(jīng)賦值,則返回true

    需要說明的是,這里雖然更改了配置的值,但是僅僅是這個(gè)頁面做了更改,到下個(gè)頁面就不起作用了,
    如果想改就永久更改,那么需要配合F函數(shù),將配置文件寫入config.php才行。


D函數(shù)用于實(shí)例化模型類格式 [資 源://][模塊/]模型 D($name=”,$layer=”)

@param string $name 資源地址 @param string $layer 模型層名稱 @return Model

D函數(shù)有2個(gè)優(yōu)點(diǎn):

  • 一是如果之前實(shí)例化過這個(gè)Model,那么就不再實(shí)例化了,省資源;
  • 二是方便調(diào)試,如果不存在 這個(gè)Model,會(huì)拋出TP異常,非常人性化。
    如果訪問本項(xiàng)目的Model直接D(“Model名稱”);就可以了,如果打算跨項(xiàng)目訪問,就使用 D(“Model名稱”,”項(xiàng)目名稱”);

E拋出異常處理 E($msg, $code=0)

@param string $msg異常消息 @param integer $code 異常代碼默認(rèn)為0 @return void

F快速文件數(shù)據(jù)讀取和保存針對(duì)簡(jiǎn)單類型數(shù)據(jù)字符串、數(shù)組 F($name, $value=”,$path=DATA_PATH)

@param string $name 緩存名稱 @param mixed $value 緩存值 @param string $path 緩存路徑 @return mixed
  • 快速保存數(shù)據(jù):F(“mydata”,”這里是要保存的數(shù)據(jù)”),這樣就在項(xiàng)目Data目錄下保存了一個(gè)名叫mydata.php的文件,里邊的內(nèi)容是該函數(shù)的第二個(gè)參數(shù)。
  • 指定保存時(shí)間 :F(“mydata”,”這里是要保存的數(shù)據(jù)”,”60″),這樣,如果下次再訪問,間隔大于60秒則刪除次緩存文件。
  • 指定保存目錄:F(“mydata”,”這里是要保存的數(shù)據(jù)”,”60″,DATA_PATH) ,這樣就指定保存在data目錄下
  • 立即刪除緩存:F(“mydata”,null),第二個(gè)參數(shù)傳遞一個(gè)null值,這樣就刪除了mydate這個(gè)緩存
  • 讀取緩存數(shù)據(jù):F(“mydata”),這樣就讀取這個(gè)緩存了

G記錄和統(tǒng)計(jì)時(shí)間(微秒)和內(nèi)存使用情況

G($start,$end='',$dec=4)

使用方法:

G('begin'); // 記錄開始標(biāo)記位 // ... 區(qū)間運(yùn)行代碼 G('end'); // 記錄結(jié)束標(biāo)簽位 echo G('begin','end',6); //統(tǒng)計(jì)區(qū)間運(yùn)行時(shí)間精確到小數(shù)后6位 echo G('begin','end','m'); // 統(tǒng)計(jì)區(qū)間內(nèi)存使用情況 如果end標(biāo)記位沒有定義,則會(huì)自動(dòng)以當(dāng)前作為標(biāo)記位

其中統(tǒng)計(jì)內(nèi)存使用需要 MEMORY_LIMIT_ON 常量為true才有效

@param string $start 開始標(biāo)簽 @param string $end 結(jié)束標(biāo)簽 @paraminteger|string $dec小數(shù)位或者m @return mixed

I獲取輸入?yún)?shù)支持過濾和默認(rèn)值

I($name,$default='',$filter=null)

使用方法:

I('id',0); //獲取id參數(shù)自動(dòng)判斷get或者post I('post.name','','htmlspecialchar s'); //獲取$_POST['name'] I('get.'); //獲取$_GET

L()獲取和設(shè)置語言定義(不區(qū)分大小 寫)

L($name=null,$value=null)
@paramstring|array $name 語言變量 @param mixed $value 語言值或者變量 @return mixed

語言定義函數(shù),L(“intro”)獲取定義成intro的語言,l(“intro”,”介紹”)為intro賦值


M函數(shù)用于實(shí)例化一個(gè)沒有模型文件的Model

M($name='',$tablePrefix='',$connection='')
@param string $name Model名稱支持指定基礎(chǔ)模型例如MongoModel:User @param string $tablePrefix表前綴 @param mixed $connection  數(shù)據(jù)庫連接信息 @return Model

N設(shè)置和獲取統(tǒng)計(jì)數(shù)據(jù)

N($key,$step=0,$save=false)

使用方法:

N('db',1); // 記錄數(shù)據(jù)庫操作次數(shù) N('read',1); // 記錄讀取次數(shù) echo N('db'); // 獲取當(dāng)前頁面數(shù)據(jù)庫的所有操作次數(shù) echo N('read'); // 獲取當(dāng)前頁面讀取次數(shù)
@param string $key 標(biāo)識(shí)位置 @param integer $step 步進(jìn)值 @return mixed

R遠(yuǎn)程調(diào)用控制器的操作方法 URL 參數(shù)格式 [資源://][模塊/]控制器/操作

R($url,$vars=array(),$layer='')
@param string $url調(diào)用地址 @paramstring|array $vars調(diào)用參數(shù)支持字符串和數(shù)組 @param string $layer 要調(diào)用的控制層名稱 @return mixed

T獲取模版文件格式資源://模塊@ 主題/控制器/操作

T($template='',$layer='')
@param string $name 模版資源地址 @param string $layer 視圖層(目錄)名稱 @return string

U()URL組裝支持不同URL模式

U($url='',$vars='',$suffix=true,$domain=false)
@param string $url URL表達(dá)式,格式:'[模塊/控制器/操作#錨點(diǎn)@域名]?參數(shù)1=值1&參數(shù)2=值2...' @paramstring|array $vars傳入的參數(shù),支持?jǐn)?shù)組和字符串 @param string $suffix 偽靜態(tài)后綴,默認(rèn)為true表示獲取配置值 @paramboolean $domain 是否顯示域名 @return string

使用方法:

  • 取得當(dāng)前模塊的Action地址 :U(“/nowMethod”);
  • 取得當(dāng)前模塊的Action地址,并傳遞參數(shù):U(“/nowMethod?params=test”);
  • (如果不習(xí)慣上邊那種方式,可以使用U(“/nowMethod”,array(“params”=>”test”);這樣的數(shù)組方式傳遞參數(shù),效果是一樣的)
  • 訪問其他模塊的方法:U(“Other/otherMethod”),這樣就是訪問Other模塊下的otherMethod方法

跨項(xiàng)目訪問:

U("appname://Other/otherMethod");

使用路由訪問:

U("appName://routeName@moduleName/actionName?params");

另外,如果想直接跳轉(zhuǎn),那么就在第二個(gè)參數(shù)寫1

U("/nowMethod",1)

這樣就直接調(diào)轉(zhuǎn)到指定URL了


W渲染輸出Widget

W($name,$data=array())
@param string $name Widget名稱 @param array $data 傳入的參數(shù) @return void

S緩存管理

S($name,$value='',$options=null)
@param mixed $name 緩存名稱,如果為數(shù)組表示進(jìn)行緩存設(shè)置 @param mixed $value 緩存值 @param mixed $options 緩存參數(shù) @return mixed
  • 全局緩存讀寫函數(shù),和C類似,不過是直接寫成文件,寫在Temp目錄下,不過在緩存有一點(diǎn)需要注意,
  • 如果緩存名稱是aaa,那么緩存生成的文件名稱就是md5(“aaa”)的值。

技術(shù)

防止xss攻擊

簡(jiǎn)單的防止

當(dāng)網(wǎng)站不涉及復(fù)雜的用戶交互時(shí),可以對(duì)用戶所有提交的文本進(jìn)行htmlspecialchars函數(shù)處理。

  • 版本為:3.2
  • 步驟:
    • 一:在項(xiàng)目配置文件中添加配置: ‘DEFAULT_FILTER’ => ‘htmlspecialchars’, //默認(rèn)過濾函數(shù)
    • 二: 使用框架帶的I方法獲取來自用戶提交的數(shù)據(jù);
  • 例子

    • M(‘Member’)->save(array(‘content’=>I(‘post.content’)));

對(duì)Cookie進(jìn)行IP綁定

  • cookie的信息一但被別人通過XSS攻擊獲取后也一樣等同于把自己的帳號(hào)密碼給了別人。
  • 對(duì)cookie進(jìn)行IP綁定,(當(dāng)然也可以獲取用戶客戶端更多的其它信息進(jìn)行同時(shí)綁定)可以根據(jù)用戶的IP來判斷這個(gè)cookie是不是來原始授權(quán)用戶。

示例

  • 用戶設(shè)置了自動(dòng)登錄時(shí)保存自動(dòng)登錄信息:
    $auto=I('post.auto');//用戶設(shè)置了自動(dòng)登錄 if(!empty($auto)){ cookie('auto',encrypt(serialize($data)));//將登錄信息保存到cookie,其中$data里含有加密后的帳號(hào),密碼,和用戶的IP,這里的cookie已在全局中設(shè)置過期日期為一周 }
  • 用戶關(guān)閉瀏覽器再次訪問網(wǎng)站時(shí),進(jìn)行自動(dòng)登錄
    if (!is_login()) {//是否未登錄狀態(tài)? $auth=cookie('auto');     if(!empty($auth)){//是否未有自動(dòng)登錄cookie?         $data=unserialize(decrypt($auth));             if(!empty($data) && !empty($data['username']) && !empty($data['password']) && !empty($data['last_login_ip'])){                 $user=M('Member')->where(array('username'=>$data['username'],'password'=>$data['password']))->find();                     if(!empty($user['id'])&&($user['last_login_ip']==get_client_ip())){//cookie帳號(hào)密碼是否有效?//IP來源是否相同?                         login_session($user['id'], $user['username'], $data['last_login_ip']);//用戶自動(dòng)登錄成功                     }             }     } }
  • 優(yōu)點(diǎn):大多數(shù)場(chǎng)景下可使被XSS攻擊盜取的cookie失效。
  • 缺點(diǎn):由于IP存在多臺(tái)電腦共用的可能,對(duì)綁定做不到十分精細(xì)

為COOKIE添加httponly配置

可以保證cookie只在http請(qǐng)求中被傳輸,而不被頁面中的腳本獲取,現(xiàn)市面上絕大多數(shù)瀏覽器已經(jīng)支持。

html5的新特性:

<iframe src="http://alibaba.com" sandbox>

為iframe的增加的sandbox屬性,可以防止不信任的Web頁面執(zhí)行某些操作.相信這個(gè)方法以后會(huì)被廣泛使用。

富文本過濾

5.0文檔?

http://www.php.cn/xiazai/shouce/31

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點(diǎn)贊12 分享