首頁 >後端開發 >php教程 >PHP 8.4 中的 HTTP 動詞變化

PHP 8.4 中的 HTTP 動詞變化

尊渡假赌尊渡假赌尊渡假赌
尊渡假赌尊渡假赌尊渡假赌轉載
2024-12-24 16:47:33904瀏覽

PHP 8.4 11 月發布,你和你的團隊對此毫無疑問 一直在努力理解新功能、棄用和 伴隨該語言最新版本的變化。這 包括對非 POST HTTP 動詞的更改。

在這個部落格中,我步行 透過PHP中HTTP動詞的背景,解釋為什麼HTTP PHP 8.4 的動詞變化很重要。然後我為開發人員提供指南 在程式碼中實現這些變更時參考。

截屏2024-12-24 16.43.04.png

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 超全域變量,使其變為以下內容:

<?php $_POST = [
    &#39;title&#39; => '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():

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


函數以一如既往的方式解析傳入的請求 用於 POST 請求,但允許您指定備用變數 儲存表單資料和檔案上傳(或覆蓋超全域變量, 如果你願意的話)。您也可以透過 $options 參數更改解析器的行為,更多資訊如下。

常見模式可能是:
<?php $_POST = [
    &#39;title&#39; => '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 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 動詞變化的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:zend.com。如有侵權,請聯絡admin@php.cn刪除