溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

PHP中的接參形式有哪些

發(fā)布時間:2021-10-12 09:35:11 來源:億速云 閱讀:261 作者:iii 欄目:編程語言

本篇內(nèi)容介紹了“PHP中的接參形式有哪些”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠?qū)W有所成!

PHP中的接參形式有哪些

對于PHP這樣一個web語言來說,接參是非常重要的一個能力。畢竟從前端表單或異步請求傳遞上來的數(shù)據(jù)都要獲取到才能進行正常的交互展示。當然,這也是所有能夠進行web開發(fā)的語言的必備能力。今天我們就來看看PHP各種各樣的接參形式。

首先,我們要準備一個靜態(tài)頁面,就像下面這個一樣,它提供了一個表單,同時url里還帶有一個GET參數(shù):

<!DOCTYPE html>
<html>
<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/>

        地址(?。?lt;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、_GET、_POST方式

// 正常的GET、POST
    echo $_GET['show'], '<br/>'; // 1
    echo $_POST['name'], '<br/>'; // 提交的內(nèi)容

這是最基礎(chǔ)的也是最直接的接參方式,GET參數(shù)通過 GET獲取,POST參數(shù)通過_GET 獲取,POST參數(shù)通過_POST 獲取,互相都不干擾。

正常的$_REQUEST方式

    // 使用REQUEST
    echo $_REQUEST['show'], '<br/>'; // 1
    echo $_REQUEST['tel'], '<br/>'; // 提交的內(nèi)容

REQUEST則是獲取所有請求中的參數(shù),不包括上傳文件。也就是說,它包含了_REQUEST 則是獲取所有請求中的參數(shù),不包括上傳文件。也就是說,它包含了_GET 、 POST以及_POST 以及_COOKIE(需要配置,默認不包含) 這三個接參變量中的所有內(nèi)容。這里需要注意的一點是,PHP5.3以后, $_REQUEST 接受的參數(shù)變量內(nèi)容由 php.ini 文件中的 request_order 指定,默認情況下這個配置參數(shù)的值是 GP 也就是 GET 和 POST ,并沒有 COOKIE ,想要 COOKIE 的話需要修改這里添加一個C就可以了。

如果 GET、_GET 、_POST 中有同名的內(nèi)容呢? $_REQUEST 展示的順序也是根據(jù)這配置參數(shù)的順序來的,從左至右,后面的覆蓋前面的,比如你配置的是GP 那么參數(shù)覆蓋的順序是: POST > GET,最終顯示的就是 POST 中的內(nèi)容。

register_globals問題

    // register_globals 如果打開
    echo $name, '<br/>'; // 提交的內(nèi)容
    echo $tel, '<br/>'; // 提交的內(nèi)容

這是一個不安全的配置,也是在 php.ini 文件中進行配置的。它的作用就是將請求來的參數(shù)直接轉(zhuǎn)成變量,有全局變量污染的問題,不要打開?。?!現(xiàn)在的 php.ini 文件中基本都是默認關(guān)閉的。

import_request_variables

    // import_request_variables 抱歉,5.4之后已經(jīng)取消了
    import_request_variables('pg', 'pg_');
    echo $pg_show, '<br/>';
    echo $pg_name, '<br/>';

這個函數(shù)是手動將指定的參數(shù)變量里面的內(nèi)容注冊為全局變量,同樣的,它也在5.4之后被取消的,這樣的函數(shù)都會存在風險,我們了解一下曾經(jīng)有過這樣一個函數(shù)即可。

extract

    extract($_POST, EXTR_PREFIX_ALL, 'ex');
    echo $ex_name, '<br/>'; // 提交的內(nèi)容
    echo $ex_tel, '<br/>'; // 提交的內(nèi)容

extract 是目前可以代替上面兩種參數(shù)轉(zhuǎn)變量的方式中目前依然支持的。它是由我們自己來控制對已存在變量的覆蓋的,也就是第二個參數(shù),這樣在可控的環(huán)境下可以極大地避免污染全局變量的問題,當然前提還是我們自己要確定使用它,具體內(nèi)容可以自行查找文檔參考哦!

參數(shù)名中的.和空格

    // 參數(shù)名中的.和空格
    echo $_REQUEST['address_prov'], '<br/>'; // 提交的內(nèi)容
    echo $_REQUEST['address_city'], '<br/>'; // 提交的內(nèi)容

表單提交的 input 的 name 中如果包含 . 或者 空格 ,將直接轉(zhuǎn)換成 下劃線 。不過我們在前端命名中也不建議使用 . 或者 空格 ,需要的時候直接就使用 下劃線 就好了,前后端不要造成歧義。

參數(shù)名中的[]

    // 參數(shù)名中的[]
    print_r($_REQUEST['interest']); // Array (v,....) 
    echo '<br />';
    print_r($_REQUEST['edu']); // Array (k/v,....)

當表單提交的 input 的 name 是數(shù)組形式的,也就是 "interest[]" 或 "edu[one]" 這種形式時,我們接收到的參數(shù)默認就會成為一個數(shù)組形式的內(nèi)容。

高大上的php://input

    // php://input
    $content = file_get_contents('php://input');   
    print_r($content); //name=xxx&.....

最后就是現(xiàn)在接口開發(fā)中經(jīng)常會使用的 php://input 形式接參。一般是因為安全或參數(shù)字段較多的情況下,前端通過 Body Raw 的形式直接傳遞一整段的 Body 內(nèi)容過來。這時候就只能用這種形式獲取到了,這個 Body Raw 的原始內(nèi)容一般會是一整段的文字,也有可能是進行過一些加密處理的內(nèi)容,格式可以自己定義。而面對普通表單,我們將會接收到的也是原始的表單內(nèi)容,就像上面的 name=xxx&tel=xxx&.... 這樣的內(nèi)容。

需要注意的是 enctype="multipart/form-data" 時它是無法獲取到內(nèi)容的。同時,這種方式也是代替 $HTTP_RAW_POST_DATA 全局變量的,不要再使用淘汰的能力了哦,盡早更新新版本的PHP使用新的語法特性哦!

總結(jié)

隨便一整理就發(fā)現(xiàn)原來簡簡單單的一個接參就有這么多種形式和需要注意的地方,還真是大開眼界。依然是那句話,學無止盡,繼續(xù)深入的鉆研早晚你也會成為大牛!

測試代碼:

<?php    
// 正常的GET、POST    
echo $_GET['show'], '<br/>'; // 1    
echo $_POST['name'], '<br/>'; // 提交的內(nèi)容    
// 使用REQUEST    
echo $_REQUEST['show'], '<br/>'; // 1    
echo $_REQUEST['tel'], '<br/>'; // 提交的內(nèi)容    
// // register_globals 如果打開    
// echo $name, '<br/>'; // 提交的內(nèi)容    
// echo $tel, '<br/>'; // 提交的內(nèi)容    
// // import_request_variables 抱歉,5.4之后已經(jīng)取消了    
// import_request_variables('pg', 'pg_');    
// echo $pg_show, '<br/>';    
// echo $pg_name, '<br/>';    
extract($_POST, EXTR_PREFIX_ALL, 'ex');    
echo $ex_name, '<br/>'; // 提交的內(nèi)容    
echo $ex_tel, '<br/>'; // 提交的內(nèi)容    
// 參數(shù)名中的.和空格    
echo $_REQUEST['address_prov'], '<br/>'; // 提交的內(nèi)容    
echo $_REQUEST['address_city'], '<br/>'; // 提交的內(nèi)容    
// 參數(shù)名中的[]    
print_r($_REQUEST['interest']); // Array (v,....)     
echo '<br />';    
print_r($_REQUEST['edu']); // Array (k/v,....)     
// php://input    
$content = file_get_contents('php://input');    
print_r($content); //name=xxx&.....    
?>    
<!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>

“PHP中的接參形式有哪些”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

php
AI