站長資訊網(wǎng)
        最全最豐富的資訊網(wǎng)站

        PHP中接收外部參數(shù)的方式有哪些

        本篇文章給大家介紹一下PHP中接收外部參數(shù)的方式。有一定的參考價值,有需要的朋友可以參考一下,希望對大家有所幫助。

        PHP中接收外部參數(shù)的方式有哪些

        變著花樣來接參,PHP中接收外部參數(shù)的方式

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

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

        <!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/>          學(xué)歷1:<input type="text" name="edu[one]"/><br/>         學(xué)歷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/>'; // 提交的內(nèi)容

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

        正常的$_REQUEST方式

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

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

        如果 $_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ù)都會存在風(fēng)險,我們了解一下曾經(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)境下可以極大地避免污染全局變量的問題,當(dāng)然前提還是我們自己要確定使用它,具體內(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,....)

        當(dāng)表單提交的 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)原來簡簡單單的一個接參就有這么多種形式和需要注意的地方,還真是大開眼界。依然是那句話,學(xué)無止盡,繼續(xù)深入的鉆研早晚你也會成為大牛!

        測試代碼:

        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

        推薦學(xué)習(xí):php視頻教程

        贊(0)
        分享到: 更多 (0)
        網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號
        主站蜘蛛池模板: 最新精品露脸国产在线 | 亚洲精品乱码久久久久久自慰| 精品人妻码一区二区三区| 麻豆国产高清精品国在线| 99R在线精品视频在线播放| 99国产欧美精品久久久蜜芽| 在线观看亚洲精品福利片| 久草视频精品在线| 国产成人综合精品一区| 九九热在线视频观看这里只有精品| 精品亚洲成a人片在线观看| 亚州日韩精品专区久久久 | 日本精品不卡视频| 国产精品露脸国语对白| 骚片AV蜜桃精品一区| 久久久久人妻一区精品果冻| 国产福利电影一区二区三区,亚洲国模精品一区| 国产精品后入内射日本在线观看| 亚洲欧美日韩国产精品专区| 欧美在线精品一区二区三区| 久久精品夜色噜噜亚洲A∨| 国产精品v欧美精品v日韩| 欧洲精品视频在线观看| 国产精品久久久久久福利漫画| HEYZO无码综合国产精品227| 精品国际久久久久999波多野| 无码人妻精品一区二区三区夜夜嗨| 亚洲国产一成久久精品国产成人综合| 久久久不卡国产精品一区二区| 精品久久久无码中文字幕| 精品亚洲欧美无人区乱码| 久久成人精品| 日韩专区亚洲精品欧美专区| 无码精品人妻一区| 中文字幕精品视频在线| 亚洲处破女AV日韩精品| 久久亚洲国产成人精品性色 | 中文字幕精品亚洲无线码一区应用 | 日韩精品欧美国产在线| 日韩AV毛片精品久久久| 伊人久久精品无码二区麻豆|