Eine eingehende Analyse verschiedener Parameterzugriffsformen in PHP

青灯夜游
Freigeben: 2023-04-10 17:20:02
nach vorne
2722 Leute haben es durchsucht

Dieser Artikel führt Sie durch verschiedene Möglichkeiten, externe Parameter in PHP zu empfangen. Ich hoffe, er wird Ihnen helfen!

Eine eingehende Analyse verschiedener Parameterzugriffsformen in PHP

Für eine Websprache wie PHP ist der Empfang von Parametern eine sehr wichtige Fähigkeit. Schließlich müssen die vom Front-End-Formular oder der asynchronen Anforderung übergebenen Daten für die normale interaktive Anzeige abgerufen werden. Natürlich ist dies auch eine wesentliche Fähigkeit für alle Sprachen, die zur Webentwicklung geeignet sind. Heute werfen wir einen Blick auf die verschiedenen Parameterzugriffsformen in PHP.

Zuerst müssen wir eine statische Seite vorbereiten, genau wie die folgende, die ein Formular und einen GET-Parameter in der URL bereitstellt:

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

        地址(省):<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>
Nach dem Login kopieren

NormalG E T, _GET,
// 正常的GET、POST
    echo $_GET[&#39;show&#39;], &#39;<br/>&#39;; // 1
    echo $_POST[&#39;name&#39;], &#39;<br/>&#39;; // 提交的内容
Nach dem Login kopieren
Dies ist die einfachste und direkteste Methode zum Empfangen von GET-Parametern

Get,

POST Parameter werden über _GET abgerufen, POST-Parameter werden über abgerufen G

正常的$_REQUEST方式

    // 使用REQUEST
    echo $_REQUEST[&#39;show&#39;], &#39;<br/>&#39;; // 1
    echo $_REQUEST[&#39;tel&#39;], &#39;<br/>&#39;; // 提交的内容
Nach dem Login kopieren

REQUEST则是获取所有请求中的参数,不包括上传文件。也就是说,它包含了_REQUEST 则是获取所有请求中的参数,不包括上传文件。也就是说,它包含了_GET 、 POST以及_POST 以及_COOKIE(需要配置,默认不包含) 这三个接参变量中的所有内容。这里需要注意的一点是,PHP5.3以后, $_REQUEST 接受的参数变量内容由 php.ini 文件中的 request_order 指定,默认情况下这个配置参数的值是 GP 也就是 GET 和 POST ,并没有 COOKIE ,想要 COOKIE 的话需要修改这里添加一个C就可以了。

如果 GET_GET 、_POST 中有同名的内容呢? $_REQUEST 展示的顺序也是根据这配置参数的顺序来的,从左至右,后面的覆盖前面的,比如你配置的是GP 那么参数覆盖的顺序是: POST > GET,最终显示的就是 POST 中的内容。

register_globals问题

    // register_globals 如果打开
    echo $name, &#39;<br/>&#39;; // 提交的内容
    echo $tel, &#39;<br/>&#39;; // 提交的内容
Nach dem Login kopieren

这是一个不安全的配置,也是在 php.ini 文件中进行配置的。它的作用就是将请求来的参数直接转成变量,有全局变量污染的问题,不要打开!!!现在的 php.ini 文件中基本都是默认关闭的。

import_request_variables

    // import_request_variables 抱歉,5.4之后已经取消了
    import_request_variables(&#39;pg&#39;, &#39;pg_&#39;);
    echo $pg_show, &#39;<br/>&#39;;
    echo $pg_name, &#39;<br/>&#39;;
Nach dem Login kopieren

这个函数是手动将指定的参数变量里面的内容注册为全局变量,同样的,它也在5.4之后被取消的,这样的函数都会存在风险,我们了解一下曾经有过这样一个函数即可。

extract

    extract($_POST, EXTR_PREFIX_ALL, &#39;ex&#39;);
    echo $ex_name, &#39;<br/>&#39;; // 提交的内容
    echo $ex_tel, &#39;<br/>&#39;; // 提交的内容
Nach dem Login kopieren

extract 是目前可以代替上面两种参数转变量的方式中目前依然支持的。它是由我们自己来控制对已存在变量的覆盖的,也就是第二个参数,这样在可控的环境下可以极大地避免污染全局变量的问题,当然前提还是我们自己要确定使用它,具体内容可以自行查找文档参考哦!

参数名中的.和空格

    // 参数名中的.和空格
    echo $_REQUEST[&#39;address_prov&#39;], &#39;<br/>&#39;; // 提交的内容
    echo $_REQUEST[&#39;address_city&#39;], &#39;<br/>&#39;; // 提交的内容
Nach dem Login kopieren

表单提交的 input 的 name 中如果包含 . 或者 空格 ,将直接转换成 下划线 。不过我们在前端命名中也不建议使用 . 或者 空格 ,需要的时候直接就使用 下划线 就好了,前后端不要造成歧义。

参数名中的[]

    // 参数名中的[]
    print_r($_REQUEST[&#39;interest&#39;]); // Array (v,....) 
    echo &#39;<br />&#39;;
    print_r($_REQUEST[&#39;edu&#39;]); // Array (k/v,....)
Nach dem Login kopieren

当表单提交的 input 的 name 是数组形式的,也就是 "interest[]" 或 "edu[one]" 这种形式时,我们接收到的参数默认就会成为一个数组形式的内容。

高大上的php://input

    // php://input
    $content = file_get_contents(&#39;php://input&#39;);   
    print_r($content); //name=xxx&.....
Nach dem Login kopieren

最后就是现在接口开发中经常会使用的 php://input 形式接参。一般是因为安全或参数字段较多的情况下,前端通过 Body Raw 的形式直接传递一整段的 Body 内容过来。这时候就只能用这种形式获取到了,这个 Body Raw 的原始内容一般会是一整段的文字,也有可能是进行过一些加密处理的内容,格式可以自己定义。而面对普通表单,我们将会接收到的也是原始的表单内容,就像上面的 name=xxx&tel=xxx&.... 这样的内容。

需要注意的是 enctype="multipart/form-data" 时它是无法获取到内容的。同时,这种方式也是代替 $HTTP_RAW_POST_DATA 全局变量的,不要再使用淘汰的能力了哦,尽早更新新版本的PHP使用新的语法特性哦!

总结

随便一整理就发现原来简简单单的一个接参就有这么多种形式和需要注意的地方,还真是大开眼界。依然是那句话,学无止尽,继续深入的钻研早晚你也会成为大牛!

测试代码:

<?php    
// 正常的GET、POST    
echo $_GET[&#39;show&#39;], &#39;<br/>&#39;; // 1    
echo $_POST[&#39;name&#39;], &#39;<br/>&#39;; // 提交的内容    
// 使用REQUEST    
echo $_REQUEST[&#39;show&#39;], &#39;<br/>&#39;; // 1    
echo $_REQUEST[&#39;tel&#39;], &#39;<br/>&#39;; // 提交的内容    
// // register_globals 如果打开    
// echo $name, &#39;<br/>&#39;; // 提交的内容    
// echo $tel, &#39;<br/>&#39;; // 提交的内容    
// // import_request_variables 抱歉,5.4之后已经取消了    
// import_request_variables(&#39;pg&#39;, &#39;pg_&#39;);    
// echo $pg_show, &#39;<br/>&#39;;    
// echo $pg_name, &#39;<br/>&#39;;    
extract($_POST, EXTR_PREFIX_ALL, &#39;ex&#39;);    
echo $ex_name, &#39;<br/>&#39;; // 提交的内容    
echo $ex_tel, &#39;<br/>&#39;; // 提交的内容    
// 参数名中的.和空格    
echo $_REQUEST[&#39;address_prov&#39;], &#39;<br/>&#39;; // 提交的内容    
echo $_REQUEST[&#39;address_city&#39;], &#39;<br/>&#39;; // 提交的内容    
// 参数名中的[]    
print_r($_REQUEST[&#39;interest&#39;]); // Array (v,....)     
echo &#39;<br />&#39;;    
print_r($_REQUEST[&#39;edu&#39;]); // Array (k/v,....)     
// php://input    
$content = file_get_contents(&#39;php://input&#39;);    
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>
Nach dem Login kopieren

推荐学习:《PHP视频教程

Das obige ist der detaillierte Inhalt vonEine eingehende Analyse verschiedener Parameterzugriffsformen in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
php
Quelle:juejin.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!