搜索
首页后端开发PHP问题PHP中接收外部参数的方式有哪些

本篇文章给大家介绍一下PHP中接收外部参数的方式。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。

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[&#39;show&#39;], &#39;<br/>&#39;; // 1
    echo $_POST[&#39;name&#39;], &#39;<br/>&#39;; // 提交的内容

这是最基础的也是最直接的接参方式,GET参数通过 $_GET 获取,POST参数通过 $_POST 获取,互相都不干扰。

正常的$_REQUEST方式

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

$_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, &#39;<br/>&#39;; // 提交的内容
    echo $tel, &#39;<br/>&#39;; // 提交的内容

这是一个不安全的配置,也是在 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;;

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

extract

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

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

参数名中的.和空格

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

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

参数名中的[]

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

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

高大上的php://input

    // php://input
    $content = file_get_contents(&#39;php://input&#39;);   
    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中文网其他相关文章!

声明
本文转载于:segmentfault。如有侵权,请联系admin@php.cn删除
酸与基本数据库:差异和何时使用。酸与基本数据库:差异和何时使用。Mar 26, 2025 pm 04:19 PM

本文比较了酸和基本数据库模型,详细介绍了它们的特征和适当的用例。酸优先确定数据完整性和一致性,适合财务和电子商务应用程序,而基础则侧重于可用性和

PHP安全文件上传:防止与文件相关的漏洞。PHP安全文件上传:防止与文件相关的漏洞。Mar 26, 2025 pm 04:18 PM

本文讨论了确保PHP文件上传的确保,以防止诸如代码注入之类的漏洞。它专注于文件类型验证,安全存储和错误处理以增强应用程序安全性。

PHP输入验证:最佳实践。PHP输入验证:最佳实践。Mar 26, 2025 pm 04:17 PM

文章讨论了PHP输入验证以增强安全性的最佳实践,重点是使用内置功能,白名单方法和服务器端验证等技术。

PHP API率限制:实施策略。PHP API率限制:实施策略。Mar 26, 2025 pm 04:16 PM

本文讨论了在PHP中实施API速率限制的策略,包括诸如令牌桶和漏水桶等算法,以及使用Symfony/Rate-limimiter之类的库。它还涵盖监视,动态调整速率限制和手

php密码哈希:password_hash和password_verify。php密码哈希:password_hash和password_verify。Mar 26, 2025 pm 04:15 PM

本文讨论了使用password_hash和pyspasswify在PHP中使用密码的好处。主要论点是,这些功能通过自动盐,强大的哈希算法和SECH来增强密码保护

OWASP前10 php:描述并减轻常见漏洞。OWASP前10 php:描述并减轻常见漏洞。Mar 26, 2025 pm 04:13 PM

本文讨论了OWASP在PHP和缓解策略中的十大漏洞。关键问题包括注射,验证损坏和XSS,并提供用于监视和保护PHP应用程序的推荐工具。

PHP XSS预防:如何预防XSS。PHP XSS预防:如何预防XSS。Mar 26, 2025 pm 04:12 PM

本文讨论了防止PHP中XSS攻击的策略,专注于输入消毒,输出编码以及使用安全增强的库和框架。

PHP接口与抽象类:何时使用。PHP接口与抽象类:何时使用。Mar 26, 2025 pm 04:11 PM

本文讨论了PHP中接口和抽象类的使用,重点是何时使用。界面定义了无实施的合同,适用于无关类和多重继承。摘要类提供常见功能

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
4 周前By尊渡假赌尊渡假赌尊渡假赌

热工具

螳螂BT

螳螂BT

Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

MinGW - 适用于 Windows 的极简 GNU

MinGW - 适用于 Windows 的极简 GNU

这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

功能强大的PHP集成开发环境

EditPlus 中文破解版

EditPlus 中文破解版

体积小,语法高亮,不支持代码提示功能

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境