本篇文章為大家介紹PHP中接收外部參數的方式。有一定的參考價值,有需要的朋友可以參考一下,希望對大家有幫助。
對PHP這樣一個web語言來說,接參是非常重要的一個能力。畢竟從前端表單或非同步請求傳遞上來的資料都要取得到才能進行正常的互動展示。當然,這也是所有能夠進行web開發的語言的必備能力。今天我們就來看看PHP各種各樣的接參形式。
首先,我們要準備一個靜態頁面,就像下面這個一樣,它提供了一個表單,同時url裡還帶有一個GET參數:
<!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方式
// 正常的GET、POST echo $_GET['show'], '<br/>'; // 1 echo $_POST['name'], '<br/>'; // 提交的内容
這是最基礎的也是最直接的接參方式,GET參數透過$_GET 獲取,POST參數透過$_POST 獲取,互相都不干擾。
正常的$_REQUEST方式
// 使用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問題
// register_globals 如果打开 echo $name, '<br/>'; // 提交的内容 echo $tel, '<br/>'; // 提交的内容
這是一個不安全的配置,也是在 php.ini 檔案中進行配置的。它的作用就是將請求來的參數直接轉成變量,有全域變量污染的問題,不要打開! ! !現在的 php.ini 檔案中基本上都是預設關閉的。
import_request_variables
// import_request_variables 抱歉,5.4之后已经取消了 import_request_variables('pg', 'pg_'); echo $pg_show, '<br/>'; echo $pg_name, '<br/>';
這個函數是手動將指定的參數變數裡面的內容註冊為全域變量,同樣的,它也在5.4之後被取消的,這樣的函數都會有風險,我們來了解曾經有過這樣一個函數即可。
extract
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
// 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使用新的語法特性哦!
總結
隨便一整理就發現原來簡簡單單的一個接參就有這麼多形式和需要注意的地方,還真是大開眼界。還是那句話,學無止盡,繼續深入的鑽研早晚你也會成為大牛!
測試程式碼:
https://github.com/zhangyue0503/dev-blog/blob/master/php/202002/source/%E5%8F%98%E7%9D%80%E8%8A%B1%E6%A0%B7%E6%9D%A5%E6%8E%A5%E5%8F%82%EF%BC%8CPHP%E4%B8%AD%E6%8E%A5%E6%94%B6%E5%A4%96%E9%83%A8%E5%8F%82%E6%95%B0%E7%9A%84%E6%96%B9%E5%BC%8F.php
推薦學習:php影片教學
以上是PHP中接收外部參數的方式有哪些的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本文比較了酸和基本數據庫模型,詳細介紹了它們的特徵和適當的用例。酸優先確定數據完整性和一致性,適合財務和電子商務應用程序,而基礎則側重於可用性和

本文討論了確保PHP文件上傳的確保,以防止諸如代碼注入之類的漏洞。它專注於文件類型驗證,安全存儲和錯誤處理以增強應用程序安全性。

本文討論了在PHP中實施API速率限制的策略,包括諸如令牌桶和漏水桶等算法,以及使用Symfony/Rate-limimiter之類的庫。它還涵蓋監視,動態調整速率限制和手

本文討論了使用password_hash和pyspasswify在PHP中使用密碼的好處。主要論點是,這些功能通過自動鹽,強大的哈希算法和SECH來增強密碼保護

本文討論了OWASP在PHP和緩解策略中的十大漏洞。關鍵問題包括注射,驗證損壞和XSS,並提供用於監視和保護PHP應用程序的推薦工具。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

WebStorm Mac版
好用的JavaScript開發工具

Dreamweaver CS6
視覺化網頁開發工具