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 ModelD函數(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ì)被廣泛使用。