ThinkPHP函式詳解 I方法

2021-09-06 15:05:54 字數 4046 閱讀 6934

正如你所見到的一樣,i方法是thinkphp眾多單字母函式中的新成員,其命名來自於英文input(輸入),主要用於更加方便和安全的獲取系統輸入變數,可以用於任何地方,用法格式如下:

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

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

變數型別

含義get

獲取get引數

post

獲取post引數

param

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

request

獲取request 引數

put獲取put 引數

session

獲取 $_session 引數

cookie

獲取 $_cookie 引數

server

獲取 $_server 引數

globals

獲取 $globals引數

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

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

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

用法

echo i('get.id',0); //

如果不存在$_get['id'] 則返回0

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位址是

輸出2013

echo i('param.2'); //

輸出06

echo i('param.3'); //

輸出01

i('id'); //

等同於 i('param.id')

i('name'); //

等同於 i('param.name')

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

function

filter_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方法中的有效值(不同的伺服器環境可能有所不同),可能支援的包括:

intboolean

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方法

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

ThinkPHP函式詳解 I方法

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