首頁 > php框架 > ThinkPHP > 主體

說說TP5.0.x指令是如何執行filter的!

藏色散人
發布: 2022-02-09 09:07:47
轉載
2617 人瀏覽過

下面thinkphp框架教學欄位將介紹Thinkphp5.0.x指令怎麼執行filter,希望對需要的朋友有幫助!

Thinkphp5.0.x指令執行

同樣是利用<span style="color:#c7254e;">call_user_func()</span>進行指令執行,在Request類的函數filterValue中執行【推薦:thinkphp影片教學

先搜尋哪些函數呼叫了filterValue:

##在Request類中的cookie()和input()函數中呼叫了filterValue()

搜尋cookie函數呼叫情況,未發現結果;搜尋input呼叫情況:

#從run函數跟進:

Step1

#在

$request = is_null($request) ? Request::##instance #() : $request;#會執行request的建構函數,此時已經透過建構函式中file_get_contents('php: //input')取得了POST的內容並賦值給$request->input變數

Step2

#$dispatch

= self::routeCheck##($request, $config);

在routeCheck中會進入Route類別的check函數:

#check函數呼叫了$request->method():

傳入參數預設值為false,會執行到elseif中取得var_method => _method,下面會對取得到的變數進行覆蓋,此時如果傳入__construct,$_POST取得到post提交的數據,即可在construct函數中遍歷POST的陣列對request類別中的成員進行覆寫

#以下利用過程需要:debug模式開啟

在run()中會呼叫param():

跟進param函數:

    /**

     * 取得目前要求的參數

     * @access public

     * @param string|array  $name預設值

     * @param string|array  $filter 篩選方法

     * @return mixed

    */

先進入if條件,跟進method方法

method()傳入參數為true:

執行下列語句:取得原始請求類型

$_SERVER

['REQUEST_METHOD'],傳回值為POST

回到param中,$ method=POST

因此會執行switch中的POST部分,進入post函數:

post函數:

    / **

     * 設定取得POST參數

     * @access public

     * @param string      

     * @param string|array  $filter 濾波方法

     * @return mixed

    */

傳入參數:

,然後複製給$content,然後對$_POST和是否json格式判斷,如果是json傳入還需要進行json_decode,否則直接使用$_POST的值

進入input方法:傳入參數為POST所取得到的

Name為false,input回傳data,post()直接回傳

param()函數中:

$vars

=

$this->post##(false);進入getFilter:

getFilter中$filter = $filter ?: $this-> filter;取得到$request類別的filter變數值(先前在construct遍歷覆寫的),並作為傳回值給input函數

繼續執行array_walk_recursive($data, [$this# , 'filterValue'], #$filter)

;

array_walk_recursive()

函數對陣列中的每個元素套用使用者自訂函數。在函數中,陣列的鍵名和鍵值是參數

相當於$filters=system$ data中的每一個變數以$value傳入,當取到ccc=ipconfig時, system作為call_user_func#第一個參數,ipconfig

作為第二個,造成了命令執行。

執行結果:

 

 

### ###

以上是說說TP5.0.x指令是如何執行filter的!的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:csdn.net
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板