PHP 8.4 中的 HTTP 动词变化

PHP 8.4 已于 11 月发布,您和您的团队无疑一直在努力理解该语言最新版本所带来的新功能、弃用和更改。这包括对非 POST HTTP 动词的更改。在这篇博客中,我将介绍 PHP 中 HTTP 动词的背景,解释为什么 PHP 8.4 中的 HTTP 动词变化很重要。然后,我提供了一个指南,供开发人员在代码中实现这些更改时参考。

PHP 8.4 中的 HTTP 动词变化

PHP 中的 HTTP 动词:背景

PHP 开发时考虑到了网络,并支持其表单处理 最早的日子。最初在 HTTP 中,本质上只有两个 浏览器可以请求网页的方法:通过 GET 或 POST。  虽然 HTML 表单仍然只真正支持这两种方法, JavaScript 能够使用任何 HTTP 方法发送 HTTP 请求, 许多工具包(例如 HTMX)甚至可以为开发人员无缝处理此问题。

GET 和 POST HTTP 方法

GET 请求通过 URL 的查询字符串传递表单数据。 这意味着表单结果可以被添加书签、重复,甚至 缓存。因此,GET 请求通常仅用于操作 请求状态而不改变状态:搜索、结果 排序、结果过滤、分页等

如果你想执行 可能会在应用程序内进行更改的操作 – 例如, 处理购物车、发送支持消息、上传 图像等 — 您将使用 POST HTTP 方法。 POST 请求是 被认为是非幂等的,这意味着它们不能被缓存并且不应该 需要重复,因为它们有副作用。这些影响可能意味着数据库中的插入、更改或删除、文件系统操作、Web 请求或其他操作。

在 为了自动处理表单数据,PHP 提供了几种 它从传入请求填充的超全局变量。 $_GET 填充有 URL 查询字符串参数,并且可以从任何请求方法填充。然而,$_POST 仅由使用内容类型 application/x-www-form-urlencoded 发出的 POST 请求的正文填充,其可能如下所示:

title=HTTP Verbs Changes in PHP 8.4&url=https://example.org/blog/php-8.4-http-verbs&author=Just Some Guy&tags[0]=php&tags[1]=http

PHP 将接受它并填充 $_POST 超全局变量,使其变为以下内容:

 'HTTP Verbs Changes in PHP 8.4',    'url' => 'https://example.org/blog/php-8.4-http-verbs',    'author' => 'Just Some Guy',    'tags' => ['php', 'http'],];

PHP 确实这样做的事实这在幕后为您提供了 PHP 如此易于学习和入门的部分原因。

此外,它还可以处理内容类型 multipart/form-data,允许浏览器上传文件另外提供表单数据。当它这样做时,它将填充一个额外的 $_FILES superglobal,提供上传文件的信息; 然后,开发人员可以在存储之前验证和预处理这些文件 它们位于永久位置。

其他 HTTP 方法

还有 比 GET 和 POST 多得多的 HTTP 方法以及 Web 开发人员 通常会想要选择不同的方法来提供上下文 他们正在尝试执行以下操作:

PUT 通常用于指示数据应替换现有数据。PATCH 通常用于指示对现有记录的部分更新DELETE 用于表示应删除或标记为提交的记录或内容已删除。

虽然浏览器本身不支持这些(还!),但许多 JavaScript 框架和库都支持。

但是 有一个问题:PHP 不会自动处理这些请求。在 事实上,你必须完全自己处理这些解析,这 当您还开始处理文件上传时,可能会出现很大的问题 以及表单数据。 (永远不要推出自己的解析器!)

对非 POST HTTP 动词的更改

PHP 8.4 引入了方法 request_parse_body():

立即学习“PHP免费学习笔记(深入)”;

[$_POST, $_FILES] = request_parse_body(?array $options = null);

函数以一如既往的方式解析传入的请求 用于 POST 请求,但允许您指定备用变量 存储表单数据和文件上传(或覆盖超全局变量, 如果你愿意的话)。您还可以通过 $options 参数更改解析器的行为,更多信息如下。

常见模式可能是:

<?phpif (in_array($_SERVER['REQUEST_METHOD'], ['PUT', 'PATCH', 'DELETE'], true)) {    [$_POST, $_FILES] = request_parse_body();}

(尽管如果您正在使用框架,希望框架能够为您处理该细节。)

那就是 从字面上看是整个功能。提供一个简单的功能 作为 PHP 开发人员,您已经熟悉了交钥匙行为。它 没有比这更好的了!

PHP 8.4 中的 HTTP 动词:开发人员指南

现在 我们已经讨论了 PHP 8.4 中 HTTP 动词的变化,让我们 查看一些示例,了解如何使用和应用这些 代码中的更新。

支持的内容类型

就像 POST 请求一样,request_parse_body() 只会解析具有以下内容的请求类型:

application/x-www-form-urlencodedmultipart/form-data

在 application/x-www- 的情况下形式 urlencoded,$_FILES 等效 数组(返回数组中的索引 1)将为空。如果内容 不支持类型,该函数将抛出 InvalidArgumentException。

php://input

PHP 允许您通过 php://input 流检查原始请求内容。这是一个缓冲流,可以(从 PHP 7.4 开始)多次读取。但是,当接收 multipart/form-data 时 内容,PHP 变得有点破坏性,有一个很好的理由:缓冲 文件可能会导致文件内容被写入磁盘两次, 导致更多的内存、存储和 I/O 使用。

因此,request_parse_body() 不得调用两次,因为它会破坏性地消耗 php://input。

$options参数

request_parse_body() 的 $options 参数允许您在运行时更改其行为,而不是依赖于硬编码php.ini 配置。

指定 post_max_size 作为它将尝试解析的最大内容大小。指定 max_input_vars 以限制它将尝试解析的表单变量数量。指定 upload_max_filesize 来限制单个文件的大小指定 max_file_uploads 以限制它将处理的文件上传数量。指定 max_multipart_body_parts 以限制它将解析的文件上传和表单数据变量的组合。

以上就是PHP 8.4 中的 HTTP 动词变化的详细内容,更多请关注php中文网其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1283893.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月11日 00:15:07
下一篇 2025年12月11日 00:15:18

相关推荐

  • PHP isset() 的陷阱:为何空值和 $_GET 参数仍返回 true?

    本教程深入探讨 PHP 中 isset() 函数的行为,尤其是在处理空字符串和通过 $_GET 接收的表单参数时。文章将解释为何即使表单字段为空或在 JavaScript 中为 undefined,isset() 仍可能返回 true,并详细对比 isset() 与 empty() 的区别,提供实际…

    2025年12月11日
    000
  • WP All Import:合并多库存位置的产品库存数量到WooCommerce

    本教程详细介绍了如何使用WP All Import插件,将来自XML数据源的多个库存位置(如wh1stock和wh2stock)的产品库存数量进行合并,并正确更新到WooCommerce商店。文章将重点讲解如何利用WP All Import内置的[MATH]函数,直接在库存数量字段中实现库存的自动累…

    2025年12月11日
    000
  • PHP连接MySQL后如何执行INSERT语句

    要安全执行php连接mysql后的insert语句,必须使用预处理语句防止sql注入。1. 建立数据库连接,推荐使用支持预处理的pdo或mysqli扩展;2. 构造带有占位符的sql语句,如insert into users (username, email) values (:username, …

    2025年12月11日 好文分享
    000
  • PHP怎么实现文件自动归档 文件智能归档方案分享

    文件自动归档可通过php实现,核心步骤包括扫描目录、制定规则和执行操作。1. 扫描目录时,推荐使用recursivedirectoryiterator和recursiveiteratoriterator替代scandir(),以提升性能并支持递归遍历;2. 制定归档规则可采用配置文件(如json),…

    2025年12月11日 好文分享
    000
  • 处理PHPCMS数据库数据丢失的情况

    phpcms数据库数据丢失应对方法包括立即评估损失、停止写入操作、查找可用备份并恢复。首先确认是否为彻底丢失,检查mysql服务状态;若确定丢失则紧急止损,停止网站或数据库服务;寻找最近的可用备份文件并评估其完整性;新建数据库并导入备份文件,通过命令行或图形界面操作;修改phpcms配置文件指向新数…

    2025年12月11日 好文分享
    000
  • PHP中的混沌工程:如何构建可靠的分布式系统

    在php项目中实施混沌工程需遵循明确步骤。1.定义常态,明确系统正常运行的关键指标;2.提出假设,预测特定故障下的系统行为;3.设计实验,选择工具模拟网络延迟、服务宕机等故障场景;4.控制影响范围,优先在测试环境执行;5.监控分析,比对实验结果与假设并修复问题;6.实现自动化,持续运行实验以发现潜在…

    2025年12月11日 好文分享
    000
  • 解决PHPCMS编辑器文字排版错乱的问题

    解决phpcms编辑器文字排版错乱的问题,核心在于“净化”内容并优化编辑流程。1. 最直接的方法是使用“粘贴为纯文本”功能,剥离外部样式后再重新排版;2. 若内容已粘贴错乱,可使用“清除格式”按钮去除多余内联样式;3. 对于顽固问题,进入html源代码视图手动删除冗余的span、div标签及特殊字符…

    2025年12月11日 好文分享
    000
  • WebSocket实时通信怎么做?PHP实现方案详解

    php 实现 websocket 实时通信需借助第三方库。1. 启动 websocket 服务器:使用 ratchet 等框架,通过 composer 安装后编写监听脚本并运行;2. 前端连接:使用 javascript 的 websocket api 连接服务端,注意跨域、协议和端口配置;3. 性…

    2025年12月11日 好文分享
    000
  • WAMP环境下配置PHPCMS域名的详细教程

    配置wamp环境下的phpcms域名需完成五个步骤:1. 修改hosts文件,添加127.0.0.1 yourdomain.com和127.0.0.1 www.yourdomain.com,实现本地域名解析;2. 配置wamp虚拟主机,在httpd-vhosts.conf中设置documentroo…

    2025年12月11日 好文分享
    000
  • PHP怎样解析Protocol Buffers PHP解析Protocol Buffers教程

    php解析protocol buffers需先安装protoc编译器,再安装php的protobuf扩展。1. 安装protoc:linux用apt-get/yum,macos用brew,windows下载二进制文件并配置环境变量;2. 安装php扩展:通过pecl install protobuf…

    2025年12月11日 好文分享
    000
  • PHP怎样解析SVG图像 PHP解析SVG图像数据详细教程

    php解析svg图像的核心方法是利用xml解析库处理svg的结构。具体步骤如下:1. 使用file_get_contents读取svg文件内容;2. 通过simplexml或domdocument加载xml文档,前者简单易用,后者功能更强大;3. 利用xpath或直接访问属性提取信息,如宽度、高度和…

    2025年12月11日 好文分享
    000
  • PHP怎样处理CoAP协议消息 CoAP协议消息处理技巧分享

    php处理coap协议消息的核心在于理解其结构并利用php的网络编程能力进行解析和生成。1. 首先选择合适的库或自行编写解析逻辑,2. 使用udp socket编程接收和发送coap消息,3. 若有dtls安全需求则需处理加密过程,4. 对于observe机制,服务端需维护订阅列表并在资源变化时通知…

    2025年12月11日 好文分享
    000
  • 为PHPCMS网站添加在线客服插件的方法

    为phpcms网站添加在线客服功能的核心方法是集成第三方客服系统的javascript代码。具体步骤包括:1.选择合适的在线客服服务商,如智齿客服、美洽等;2.注册并获取提供的嵌入式javascript代码;3.登录phpcms后台,进入模板管理,找到页脚footer.html或头部header.h…

    好文分享 2025年12月11日
    000
  • PHP怎样操作数组元素 PHP数组操作的10个必备技巧

    向数组添加元素可使用[]操作符、array_unshift()或array_merge();2. 删除元素可用unset()、array_splice()或array_filter();3. 检查键或值是否存在分别用array_key_exists()和in_array();4. 排序方法包括sor…

    2025年12月11日 好文分享
    000
  • PHP中的PDO:如何在数据库操作中使用PHP的PDO扩展

    pdo 是 php 连接数据库的利器,它提供了一个轻量级、一致性的接口,通过数据访问抽象层实现多种数据库的兼容性。1. 配置 pdo:编辑 php.ini 文件启用 pdo.so 和对应数据库驱动(如 pdo_mysql.so),重启 web 服务器并使用 phpinfo() 验证。2. 连接数据库…

    2025年12月11日 好文分享
    000
  • PHP怎么实现文件批量旋转 图片旋转批量处理

    php实现文件批量旋转的核心方法是遍历目录中的图片文件并使用图像处理库进行旋转操作。1.首先,设置源目录和目标目录,并检查目标目录是否存在,若不存在则创建;2.通过scandir()函数读取源目录文件列表,并过滤掉特殊目录项.和..;3.根据文件扩展名筛选出图片文件(如jpg、jpeg、png、gi…

    2025年12月11日 好文分享
    000
  • PHP优化数据库查询 PHP源码提升MySQL性能方法

    定位php中mysql慢查询需开启慢查询日志并结合microtime或xdebug分析;编写高效sql应避免select *、合理使用索引、优化join、慎用where中的函数;缓存技术可通过memcached或redis减少数据库压力并设置合适过期时间;优化连接可采用连接池及及时关闭闲置连接;数据…

    2025年12月11日 好文分享
    000
  • PHP怎样解析Snap应用包 Snap包解析操作方法详解

    snap包解析是通过解压squashfs文件系统获取内部信息,具体步骤如下:1. 使用unsquashfs命令解压snap包;2. 查看snap.yaml获取应用元数据;3. 分析meta/gui目录获取图标和启动命令;4. 通过parts目录查看构建源码。php解析可通过exec调用unsquas…

    2025年12月11日 好文分享
    000
  • PHP怎样处理MQTT协议消息 MQTT消息处理技巧分享

    php处理mqtt协议消息需借助第三方库并理解其机制。首先选择合适的mqtt客户端库,如php-mqtt/client或bluerhinos/php-mqtt,并通过composer安装;其次配置broker连接信息(地址、端口、用户名、密码)以建立连接;接着订阅所需主题,并设置回调函数接收消息;然…

    2025年12月11日 好文分享
    000
  • PHP连接PostgreSQL PHP操作Postgres数据库教程

    php连接postgresql的关键在于安装扩展、使用连接函数、执行查询、处理结果及关闭连接。1. 安装postgresql扩展以支持数据库通信;2. 使用pg_connect()函数并传入正确的连接字符串建立连接;3. 通过pg_query()执行sql语句;4. 利用pg_fetch_assoc…

    2025年12月11日 好文分享
    000

发表回复

登录后才能评论
关注微信