PHP 8.4 中的 HTTP 动词变化(动词.变化.PHP.8.4.HTTP...)

wufei123 2025-01-05 阅读:85 评论:0
PHP 8.4 已于 11 月发布,您和您的团队无疑一直在努力理解该语言最新版本所带来的新功能、弃用和更改。这包括对非 POST HTTP 动词的更改。 在这篇博客中,我将介绍 PHP 中 HTTP 动词的背景,解释为什么 PHP 8.4...
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 请求的正文填充,其可能如下所示:

PHP
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 超全局变量,使其变为以下内容:

PHP
<?php
$_POST = [
    'title' => '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 参数更改解析器的行为,更多信息如下。

常见模式可能是:

PHP
<?php
if (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-urlencoded
  • multipart/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 动词变化的详细内容,更多请关注知识资源分享宝库其它相关文章!

版权声明

本站内容来源于互联网搬运,
仅限用于小范围内传播学习,请在下载后24小时内删除,
如果有侵权内容、不妥之处,请第一时间联系我们删除。敬请谅解!
E-mail:dpw1001@163.com

分享:

扫一扫在手机阅读、分享本文

发表评论
热门文章
  • BioWare埃德蒙顿工作室面临关闭危机,龙腾世纪制作总监辞职引关注(龙腾.总监.辞职.危机.面临.....)

    BioWare埃德蒙顿工作室面临关闭危机,龙腾世纪制作总监辞职引关注(龙腾.总监.辞职.危机.面临.....)
    知名变性人制作总监corrine busche离职bioware,引发业界震荡!外媒“smash jt”独家报道称,《龙腾世纪:影幢守护者》制作总监corrine busche已离开bioware,此举不仅引发了关于个人职业发展方向的讨论,更因其可能预示着bioware埃德蒙顿工作室即将关闭而备受关注。本文将深入分析busche离职的原因及其对bioware及游戏行业的影响。 Busche的告别信:挑战与感激并存 据“Smash JT”获得的内部邮件显示,Busche离职原...
  • boss直聘怎么取消面试预约 boss直聘上面试爽约了会怎么样(面试.爽约.预约.取消.boss.....)

    boss直聘怎么取消面试预约 boss直聘上面试爽约了会怎么样(面试.爽约.预约.取消.boss.....)
    求职宝典:boss直聘面试技巧及取消预约方法 各位求职者注意啦!在Boss直聘上,随意取消面试预约会留下爽约记录,影响后续求职!本文将指导您如何避免爽约,以及如何取消已预约的面试。 如何取消Boss直聘面试预约? 打开Boss直聘APP,进入“我的”页面。 点击“待面试”,查看面试日程。 选择需要取消的面试,点击“取消面试”按钮即可。 Boss直聘面试爽约的后果? 爽约行为会在HR端留下记录,影响您的求职成功率。其他HR也能看到您的不良记录,所以务必重视面试预约。...
  • 闪耀暖暖靡城永恒怎么样-闪耀暖暖靡城永恒套装介绍(闪耀.暖暖.套装.介绍.....)

    闪耀暖暖靡城永恒怎么样-闪耀暖暖靡城永恒套装介绍(闪耀.暖暖.套装.介绍.....)
    闪耀暖暖钻石竞技场第十七赛季“华梦泡影”即将开启!全新闪耀性感套装【靡城永恒】震撼来袭!想知道如何获得这套精美套装吗?快来看看吧! 【靡城永恒】套装设计理念抢先看: 设计灵感源于夜色中的孤星,象征着淡然、漠视一切的灰色瞳眸。设计师希望通过这套服装,展现出在虚幻与真实交织的夜幕下,一种独特的魅力。 服装细节考究,从面料的光泽、鞋跟声响到裙摆的弧度,都力求完美还原设计初衷。 【靡城永恒】套装设计亮点: 闪耀的绸缎与金丝交织,轻盈的羽毛增添华贵感。 这套服装仿佛是从无尽的黑...
  • 蛋仔派对2025最新皮肤兑换码汇总 最新皮肤兑换码一览(兑换.皮肤.最新.派对.汇总.....)

    蛋仔派对2025最新皮肤兑换码汇总 最新皮肤兑换码一览(兑换.皮肤.最新.派对.汇总.....)
    蛋仔派对2025最新皮肤兑换码大放送!游戏内新增多款皮肤兑换码,包含最新、福利和通用三种类型,助你轻松获取精美奖励! 赶紧来看看如何兑换吧! 兑换码列表: 最新兑换码: ccewndj4k4k、cdkqdfm4fh、peetnmp4ef、cdxymk8f67 福利兑换码: cca863ywtfa、eggy2310am、eggy2311gz、eggyeggy9wz 通用兑换码: pec74dkcty、jsrqkrrjmh、cd3wt7wrph、ccepn7d8cjf...
  • python怎么调用其他文件函数

    python怎么调用其他文件函数
    在 python 中调用其他文件中的函数,有两种方式:1. 使用 import 语句导入模块,然后调用 [模块名].[函数名]();2. 使用 from ... import 语句从模块导入特定函数,然后调用 [函数名]()。 如何在 Python 中调用其他文件中的函数 在 Python 中,您可以通过以下两种方式调用其他文件中的函数: 1. 使用 import 语句 优点:简单且易于使用。 缺点:会将整个模块导入到当前作用域中,可能会导致命名空间混乱。 步骤:...