ThinkPHP函式詳解 I方法

2022-08-18 18:21:09 字數 3830 閱讀 8122

瀏覽:59286 發布日期:2013/06/01 分類:文件教程 關鍵字: 函式

thinkphp的i方法是3.1.3版本新增的,如果你是之前的3.*版本的話,可以直接參考使用3.1快速入門教程系列的變數部分。正如你所見到的一樣,i方法是thinkphp眾多單字母函式中的新成員,其命名來自於英文input(輸入),主要用於更加方便和安全的獲取系統輸入變數,可以用於任何地方,用法格式如下:

i('變數型別.變數名',['預設值'],['過濾方法'])

變數型別是指請求方式或者輸入型別,包括:

變數型別

含義get

獲取get引數

post

獲取post引數

param

自動判斷請求型別獲取get、post或者put引數

request

獲取request 引數

put獲取put 引數

session

獲取 $_session 引數

cookie

獲取 $_cookie 引數

server

獲取 $_server 引數

globals

獲取 $globals引數

注意:變數型別不區分大小寫。

變數名則嚴格區分大小寫。

預設值和過濾方法均屬於可選引數。

我們以get變數型別為例,說明下i方法的使用:echo i('get.id');// 相當於 $_get['id']

echo i('get.name');// 相當於 $_get['name']

複製**

支援預設值:echo i('get.id',0);// 如果不存在$_get['id'] 則返回0

echo i('get.name','');// 如果不存在$_get['name'] 則返回空字串

複製**

採用方法過濾:echo i('get.name','','htmlspecialchars');// 採用htmlspecialchars方法對$_get['name'] 進行過濾,如果不存在則返回空字串

複製**

支援直接獲取整個變數型別,例如:i('get.');// 獲取整個$_get 陣列

複製**

用同樣的方式,我們可以獲取post或者其他輸入型別的變數,例如:i('post.name','','htmlspecialchars');// 採用htmlspecialchars方法對$_post['name'] 進行過濾,如果不存在則返回空字串

i('session.user_id',0);// 獲取$_session['user_id'] 如果不存在則預設為0

i('cookie.');// 獲取整個 $_cookie 陣列

i('server.request_method');// 獲取 $_server['request_method'] 

複製**

param變數型別是框架特有的支援自動判斷當前請求型別的變數獲取方式,例如:echo i('param.id');

複製**

如果當前請求型別是get,那麼等效於 $_get['id'],如果當前請求型別是post或者put,那麼相當於獲取 $_post['id'] 或者 put引數id。

並且param型別變數還可以用數字索引的方式獲取url引數(必須是pathinfo模式引數有效,無論是get還是post方式都有效),例如:

當前訪問url位址是http://servername/index.php/new/2013/06/01 

複製**

那麼我們可以通過echo i('param.1');// 輸出2013

echo i('param.2');// 輸出06

echo i('param.3');// 輸出01

複製**

事實上,param變數型別的寫法可以簡化為:i('id');// 等同於 i('param.id')

i('name');// 等同於 i('param.name')

複製**

使用i方法的時候 變數其實經過了兩道過濾,首先是全域性的過濾,全域性過濾是通過配置var_filters引數,這裡一定要注意,3.1版本之後,var_filters引數的過濾機制已經更改為採用array_walk_recursive方法遞迴過濾了,主要對過濾方法的要求是必須引用返回,所以這裡設定htmlspecialchars是無效的,你可以自定義乙個方法,例如:functionfilter_default(&$value)

複製**

然後配置:'var_filters'=>'filter_default'

複製**

如果需要進行多次過濾,可以用:'var_filters'=>'filter_default,filter_exp'

複製**

filter_exp方法是框架內建的安全過濾方法,用於防止利用模型的exp功能進行注入攻擊。

因為var_filters引數設定的是全域性過濾機制,而且採用的是遞迴過濾,對效率有所影響,所以,我們更建議直接對獲取變數過濾的方式,除了在i方法的第三個引數設定過濾方法外,還可以採用配置default_filter引數的方式設定過濾,事實上,該引數的預設設定是:'default_filter'=>'htmlspecialchars'

複製**

也就說,i方法的所有獲取變數都會進行htmlspecialchars過濾,那麼:i('get.name');// 等同於 htmlspecialchars($_get['name'])

複製**

同樣,該引數也可以支援多個過濾,例如:'default_filter'=>'strip_tags,htmlspecialchars'

複製**

i('get.name');// 等同於 htmlspecialchars(strip_tags($_get['name']))

複製**

如果我們在使用i方法的時候 指定了過濾方法,那麼就會忽略default_filter的設定,例如:echo i('get.name','','strip_tags');// 等同於 strip_tags($_get['name'])

複製**

i方法的第三個引數如果傳入函式名,則表示呼叫該函式對變數進行過濾並返回(在變數是陣列的情況下自動使用array_map進行過濾處理),否則會呼叫php內建的filter_var方法進行過濾處理,例如:i('post.email','',filter_validate_email);

複製**

表示 會對$_post['email'] 進行 格式驗證,如果不符合要求的話,返回空字串。

(關於更多的驗證格式,可以參考 官方手冊的filter_var用法。)

或者可以用下面的字元標識方式:i('post.email','','email');

複製**

可以支援的過濾名稱必須是filter_list方法中的有效值(不同的伺服器環境可能有所不同),可能支援的包括:int

boolean

float

validate_regexp

validate_url

validate_email

validate_ip

string

stripped

encoded

special_chars

unsafe_raw

email

urlnumber_int

number_float

magic_quotes

callback

複製**

在有些特殊的情況下,我們不希望進行任何過濾,即使default_filter已經有所設定,可以使用:i('get.name','',null);

複製**

一旦過濾引數設定為null,即表示不再進行任何的過濾。

ThinkPHP函式詳解 I方法

其命名來自於英文input 輸入 主要用於更加方便和安全的獲取系統輸入變數,可以用於任何地方,用法格式如下 i 變數型別.變數名 預設值 過濾方法 變數型別是指請求方式或者輸入型別,包括 變數型別 含義get 獲取get引數 post 獲取post引數 param 自動判斷請求型別獲取get pos...

ThinkPHP函式詳解 I方法

正如你所見到的一樣,i方法是thinkphp眾多單字母函式中的新成員,其命名來自於英文input 輸入 主要用於更加方便和安全的獲取系統輸入變數,可以用於任何地方,用法格式如下 i 變數型別.變數名 預設值 過濾方法 變數型別是指請求方式或者輸入型別,包括 變數型別 含義get 獲取get引數 po...

ThinkPHP函式詳解 I方法

thinkphp的i方法是3.1.3版本新增的,如果你是之前的3.版本的話,可以直接參考使用3.1快速入門教程系列的變數部分。該用法將會在將來的版本中廢棄,事實上,如果你仍然還在使用該方式會有警告錯誤提示 正如你所見到的一樣,i方法是thinkphp眾多單字母函式中的新成員,其命名來自於英文inpu...