PHP 8.4 11 月發布,你和你的團隊對此毫無疑問 一直在努力理解新功能、棄用和 伴隨該語言最新版本的變化。這 包括對非 POST HTTP 動詞的更改。
在這個部落格中,我步行 透過PHP中HTTP動詞的背景,解釋為什麼HTTP PHP 8.4 的動詞變化很重要。然後我為開發人員提供指南 在程式碼中實現這些變更時參考。
PHP 開發時考慮到了網絡並支援其表單處理 最早的日子。最初在 HTTP 中,本質上只有兩個 瀏覽器可以請求網頁的方法:透過 GET 或 POST。 雖然 HTML 表單仍然只真正支援這兩種方法, JavaScript 能夠使用任何 HTTP 方法傳送 HTTP 請求, 許多工具包(例如 HTMX)甚至可以為開發人員無縫處理此問題。
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 = [ '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,提供上傳檔案的資訊; 然後,開發人員可以在儲存之前驗證和預處理這些文件 它們位於永久位置。
還有 比 GET 和 POST 多得多的 HTTP 方法以及 Web 開發人員 通常會想要選擇不同的方法來提供上下文 他們正在嘗試執行以下操作:
雖然瀏覽器本身不支援這些(也!),但許多 JavaScript 框架和函式庫都支援。
但是 有一個問題:PHP 不會自動處理這些請求。在 事實上,你必須完全自己處理這些解析,這 當您也開始處理文件上傳時,可能會出現很大的問題 以及表單資料。 (絕對不要推出自己的解析器!)
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
<?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://input 串流檢查原始請求內容。這是一個緩衝流,可以(從 PHP 7.4 開始)多次讀取。但是,當接收 multipart/form-data 時 內容,PHP 變得有點破壞性,有一個很好的理由:緩衝 文件可能會導致文件內容被寫入磁碟兩次, 導致更多的記憶體、儲存和 I/O 使用。
因此,request_parse_body() 不得呼叫兩次,因為它會破壞性地消耗 php://input。
request_parse_body() 的 $options 參數允許您在運行時更改其行為,而不是依賴硬編碼php.ini 配置。
以上是PHP 8.4 中的 HTTP 動詞變化的詳細內容。更多資訊請關注PHP中文網其他相關文章!