欧美亚洲中文,在线国自产视频,欧洲一区在线观看视频,亚洲综合中文字幕在线观看

      1. <dfn id="rfwes"></dfn>
          <object id="rfwes"></object>
        1. 站長(zhǎng)資訊網(wǎng)
          最全最豐富的資訊網(wǎng)站

          深入淺析PHP中各種各樣的接參形式

          本篇文章帶大家了解一下PHP中接收外部參數(shù)的幾種方式,希望對(duì)大家有所幫助!

          深入淺析PHP中各種各樣的接參形式

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

          首先,我們要準(zhǔn)備一個(gè)靜態(tài)頁(yè)面,就像下面這個(gè)一樣,它提供了一個(gè)表單,同時(shí)url里還帶有一個(gè)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/>          學(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、_GET、

          _POST方式

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

          這是最基礎(chǔ)的也是最直接的接參方式,GET參數(shù)通過(guò)

          GET獲取,POST參數(shù)通過(guò)_GET 獲取,POST參數(shù)通過(guò)

          _POST 獲取,互相都不干擾。

          正常的$_REQUEST方式

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

          REQUEST則是獲取所有請(qǐng)求中的參數(shù),不包括上傳文件。也就是說(shuō),它包含了_REQUEST 則是獲取所有請(qǐng)求中的參數(shù),不包括上傳文件。也就是說(shuō),它包含了

          _GET 、

          POST以及_POST 以及

          _COOKIE(需要配置,默認(rèn)不包含) 這三個(gè)接參變量中的所有內(nèi)容。這里需要注意的一點(diǎn)是,PHP5.3以后, $_REQUEST 接受的參數(shù)變量?jī)?nèi)容由 php.ini 文件中的 request_order 指定,默認(rèn)情況下這個(gè)配置參數(shù)的值是 GP 也就是 GET 和 POST ,并沒(méi)有 COOKIE ,想要 COOKIE 的話需要修改這里添加一個(gè)C就可以了。

          如果

          GET、_GET 、

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

          register_globals問(wèn)題

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

          這是一個(gè)不安全的配置,也是在 php.ini 文件中進(jìn)行配置的。它的作用就是將請(qǐng)求來(lái)的參數(shù)直接轉(zhuǎn)成變量,有全局變量污染的問(wèn)題,不要打開(kāi)?。。‖F(xiàn)在的 php.ini 文件中基本都是默認(rèn)關(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/>';

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

          extract

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

          extract 是目前可以代替上面兩種參數(shù)轉(zhuǎn)變量的方式中目前依然支持的。它是由我們自己來(lái)控制對(duì)已存在變量的覆蓋的,也就是第二個(gè)參數(shù),這樣在可控的環(huán)境下可以極大地避免污染全局變量的問(wè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)換成 下劃線 。不過(guò)我們?cè)谇岸嗣幸膊唤ㄗh使用 . 或者 空格 ,需要的時(shí)候直接就使用 下劃線 就好了,前后端不要造成歧義。

          參數(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ù)默認(rèn)就會(huì)成為一個(gè)數(shù)組形式的內(nèi)容。

          高大上的php://input

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

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

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

          總結(jié)

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

          測(cè)試代碼:

          <?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 如果打開(kāi)     // 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/>     地址(?。?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/>     學(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>

          推薦學(xué)習(xí):《PHP視頻教程》

          贊(0)
          分享到: 更多 (0)
          網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)