您好,登錄后才能下訂單哦!
這期內容當中小編將會給大家帶來有關PHP中如何接收外部參數,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <form action="?show=1" method="post"> 姓名:<input type="text" name="name"/><br /> 電話:<input type="text" name="tel"/><br/> 地址(省):<input type="text" name="address.prov"/><br/> 地址(市):<input type="text" name="address city"/><br/> 興趣1:<input type="text" name="interest[]"/><br/> 興趣2:<input type="text" name="interest[]"/><br/> 興趣3:<input type="text" name="interest[]"/><br/> 學歷1:<input type="text" name="edu[one]"/><br/> 學歷2:<input type="text" name="edu[two]"/><br/> <input type="submit" value="提交" > </form> </body> </html>
// 正常的GET、POST echo $_GET['show'], '<br/>'; // 1 echo $_POST['name'], '<br/>'; // 提交的內容
這是最基礎的也是最直接的接參方式,GET參數通過 $_GET 獲取,POST參數通過 $_POST 獲取,互相都不干擾。
// 使用REQUEST echo $_REQUEST['show'], '<br/>'; // 1 echo $_REQUEST['tel'], '<br/>'; // 提交的內容
$_REQUEST 則是獲取所有請求中的參數,不包括上傳文件。也就是說,它包含了 $_GET 、 $_POST 以及 $_COOKIE(需要配置,默認不包含) 這三個接參變量中的所有內容。這里需要注意的一點是,PHP5.3以后, $_REQUEST 接受的參數變量內容由 php.ini 文件中的 request_order 指定,默認情況下這個配置參數的值是 GP 也就是 GET 和 POST ,并沒有 COOKIE ,想要 COOKIE 的話需要修改這里添加一個C就可以了。
如果 $_GET 、 $_POST 中有同名的內容呢? $_REQUEST 展示的順序也是根據這配置參數的順序來的,從左至右,后面的覆蓋前面的,比如你配置的是GP 那么參數覆蓋的順序是: POST > GET,最終顯示的就是 POST 中的內容。
// register_globals 如果打開 echo $name, '<br/>'; // 提交的內容 echo $tel, '<br/>'; // 提交的內容
這是一個不安全的配置,也是在 php.ini 文件中進行配置的。它的作用就是將請求來的參數直接轉成變量,有全局變量污染的問題,不要打開!!!現在的 php.ini 文件中基本都是默認關閉的。
// import_request_variables 抱歉,5.4之后已經取消了 import_request_variables('pg', 'pg_'); echo $pg_show, '<br/>'; echo $pg_name, '<br/>';
這個函數是手動將指定的參數變量里面的內容注冊為全局變量,同樣的,它也在5.4之后被取消的,這樣的函數都會存在風險,我們了解一下曾經有過這樣一個函數即可。
extract($_POST, EXTR_PREFIX_ALL, 'ex'); echo $ex_name, '<br/>'; // 提交的內容 echo $ex_tel, '<br/>'; // 提交的內容
extract 是目前可以代替上面兩種參數轉變量的方式中目前依然支持的。它是由我們自己來控制對已存在變量的覆蓋的,也就是第二個參數,這樣在可控的環境下可以極大地避免污染全局變量的問題,當然前提還是我們自己要確定使用它,具體內容可以自行查找文檔參考哦!
// 參數名中的.和空格 echo $_REQUEST['address_prov'], '<br/>'; // 提交的內容 echo $_REQUEST['address_city'], '<br/>'; // 提交的內容
表單提交的 input 的 name 中如果包含 . 或者 空格 ,將直接轉換成 下劃線 。不過我們在前端命名中也不建議使用 . 或者 空格 ,需要的時候直接就使用 下劃線 就好了,前后端不要造成歧義。
// 參數名中的[] print_r($_REQUEST['interest']); // Array (v,....) echo '<br />'; print_r($_REQUEST['edu']); // Array (k/v,....)
當表單提交的 input 的 name 是數組形式的,也就是 "interest[]" 或 "edu[one]" 這種形式時,我們接收到的參數默認就會成為一個數組形式的內容。
// php://input $content = file_get_contents('php://input'); print_r($content); //name=xxx&.....
最后就是現在接口開發中經常會使用的 php://input 形式接參。一般是因為安全或參數字段較多的情況下,前端通過 Body Raw 的形式直接傳遞一整段的 Body 內容過來。這時候就只能用這種形式獲取到了,這個 Body Raw 的原始內容一般會是一整段的文字,也有可能是進行過一些加密處理的內容,格式可以自己定義。而面對普通表單,我們將會接收到的也是原始的表單內容,就像上面的 name=xxx&tel=xxx&.... 這樣的內容。
需要注意的是 enctype="multipart/form-data" 時它是無法獲取到內容的。同時,這種方式也是代替 $HTTP_RAW_POST_DATA 全局變量的,不要再使用淘汰的能力了哦,盡早更新新版本的PHP使用新的語法特性哦!
上述就是小編為大家分享的PHP中如何接收外部參數了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。