PHP 8.4 11 月發(fā)布,你和你的團(tuán)隊對此毫無疑問 一直在努力理解新功能、棄用和 伴隨該語言最新版本的變化。這 包括對非 POST HTTP 動詞的更改。
在這個部落格中,我步行 透過PHP中HTTP動詞的背景,解釋為什麼HTTP PHP 8.4 的動詞變化很重要。然後我為開發(fā)人員提供指南 在程式碼中實現(xiàn)這些變更時參考。
PHP 的 HTTP 動詞:背景
PHP 開發(fā)時考慮到了網(wǎng)絡(luò)並支援其表單處理 最早的日子。最初在 HTTP 中,本質(zhì)上只有兩個 瀏覽器可以請求網(wǎng)頁的方法:透過 GET 或 POST。 ?雖然 HTML 表單仍然只真正支援這兩種方法, JavaScript 能夠使用任何 HTTP 方法傳送 HTTP 請求, 許多工具包(例如 HTMX)甚至可以為開發(fā)人員無縫處理此問題。
GET 和 POST HTTP 方法
GET 請求透過 URL 的查詢字串傳遞表單資料。 這意味著表單結(jié)果可以被加書籤、重複,甚至 快取.因此,GET 請求通常僅用於操作 請求狀態(tài)而不改變狀態(tài):搜尋、結(jié)果 排序、結(jié)果過濾、分頁等
如果你想執(zhí)行 可能會在應(yīng)用程式中進(jìn)行更改的操作 - 例如, 處理購物車、發(fā)送支援訊息、上傳 映像等 — 您將使用 POST HTTP 方法。 POST 請求是 被認(rèn)為是非冪等的,這意味著它們不能被緩存並且不應(yīng)該 需要重複,因為它們有副作用。這些影響可能意味著資料庫中的插入、變更或刪除、檔案系統(tǒng)操作、Web 請求或其他操作。
在 為了自動處理表單數(shù)據(jù),PHP 提供了幾種 它從傳入請求填充的超全域變數(shù)。 $_GET 填入 URL 查詢字串參數(shù),並且可以從任何請求方法填入。然而,$_POST 僅由使用內(nèi)容類型application/x-www-form-urlencoded 發(fā)出的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 超全域變量,使其變?yōu)橐韵聝?nèi)容:
<?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 如此易於學(xué)習(xí)和入門的原因之一。
此外,它還可以處理內(nèi)容類型multipart/form-data,它允許瀏覽器除了提供表單資料之外還可以上傳檔案。當(dāng)它這樣做時,它將填充一個額外的 $_FILES superglobal,提供上傳檔案的資訊; 然後,開發(fā)人員可以在儲存之前驗證和預(yù)處理這些文件 它們位於永久位置。
其他 HTTP 方法
還有 比 GET 和 POST 多得多的 HTTP 方法以及 Web 開發(fā)人員 通常會想要選擇不同的方法來提供上下文 他們正在嘗試執(zhí)行以下操作:
- PUT 通常用於指示資料應(yīng)替換現(xiàn)有資料。
- PATCH 通常用於指示現(xiàn)有記錄的部分更新
- DELETE 用於表示應(yīng)刪除或標(biāo)記為提交的記錄或內(nèi)容已刪除。
雖然瀏覽器本身不支援這些(也!),但許多 JavaScript 框架和函式庫都支援。
但是 有一個問題:PHP 不會自動處理這些請求。在 事實上,你必須完全自己處理這些解析,這 當(dāng)您也開始處理文件上傳時,可能會出現(xiàn)很大的問題 以及表單資料。 (絕對不要推出自己的解析器!)
對非 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
<?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'], ];
- application/x-www-form-urlencoded
- multipart/form-data
php://input
PHP 讓您透過 php://input 串流檢查原始請求內(nèi)容。這是一個緩衝流,可以(從 PHP 7.4 開始)多次讀取。但是,當(dāng)接收 multipart/form-data 時 內(nèi)容,PHP 變得有點破壞性,有一個很好的理由:緩衝 文件可能會導(dǎo)致文件內(nèi)容被寫入磁碟兩次, 導(dǎo)致更多的記憶體、儲存和 I/O 使用。
因此,request_parse_body() 不得呼叫兩次,因為它會破壞性地消耗 php://input。
$options參數(shù)
request_parse_body() 的 $options 參數(shù)允許您在運(yùn)行時更改其行為,而不是依賴硬編碼php.ini 配置。
- 指定 post_max_size 作為它將嘗試解析的最大內(nèi)容大小。
- 指定 max_input_vars 以限制它將嘗試解析的表單變數(shù)數(shù)量。
- 指定 upload_max_filesize 來限制單一檔案的大小
- 指定 max_file_uploads 以限制它將處理的檔案上傳數(shù)量。
- 指定 max_multipart_body_parts 以限制它將解析的檔案上傳和表單資料變數(shù)的組合。
以上是PHP 8.4 中的 HTTP 動詞變化的詳細(xì)內(nèi)容。更多資訊請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

熱AI工具

Undress AI Tool
免費(fèi)脫衣圖片

Undresser.AI Undress
人工智慧驅(qū)動的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強(qiáng)大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6
視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

註釋應(yīng)說明“為什麼”而非“做了什麼”,如解釋業(yè)務(wù)原因而非重複代碼操作;2.在復(fù)雜邏輯前加總覽性註釋,簡要說明流程步驟,幫助建立整體印象;3.給“奇怪”代碼加註釋,解釋非常規(guī)寫法的意圖,避免誤解為bug;4.註釋格式建議簡潔為主,單行用//,函數(shù)/類用/*.../,保持統(tǒng)一風(fēng)格;5.避免註釋與代碼不同步、註釋過長或註釋掉代碼未刪除等問題,確保註釋真正提升代碼可讀性和維護(hù)性。

在PHP中使用if/else控制結(jié)構(gòu)進(jìn)行條件判斷時,應(yīng)遵循以下要點:1.在需要根據(jù)條件執(zhí)行不同代碼塊時使用if/else;2.條件為真執(zhí)行if分支,為假進(jìn)入else或elseif;3.多條件判斷時elseif應(yīng)按邏輯順序排列,範(fàn)圍大的放前面;4.避免嵌套過深,建議三層以上考慮switch或重構(gòu);5.始終使用花括號{}提高可讀性;6.注意布爾值轉(zhuǎn)換問題,防止類型誤判;7.簡單條件可用三元運(yùn)算符簡化代碼;8.合併重複判斷減少冗餘;9.測試邊界值確保邏輯完整。掌握這些技巧有助於提升代碼質(zhì)量與穩(wěn)定性。

PHP字符串處理需掌握核心函數(shù)及場景。 1.拼接用點號或.=,大量拼接推薦數(shù)組 implode;2.查找用strpos(),替換用str_replace(),注意區(qū)分大小寫及正則使用條件;3.截取用substr(),格式化用sprintf();4.輸出HTML用htmlspecialchars(),數(shù)據(jù)庫操作用參數(shù)化查詢。熟悉這些函數(shù)行為可應(yīng)對多數(shù)開發(fā)場景。

出現(xiàn)“undefinedindex”錯誤是因為嘗試訪問了數(shù)組中不存在的鍵。要解決這個問題,首先要確認(rèn)數(shù)組鍵是否存在,可使用isset()或array_key_exists()函數(shù)檢查;其次確保表單數(shù)據(jù)正確提交,包括驗證請求方法和字段存在性;第三注意鍵名的大小寫敏感,避免拼寫錯誤;最後在使用$_SESSION、$_COOKIE等超全局?jǐn)?shù)組時也應(yīng)先檢查鍵是否存在,以避免錯誤發(fā)生。

正確使用PHP註釋的方法有兩種:單行註釋用//或#,多行註釋用/.../。 PHP語法需注意每條語句以分號結(jié)尾、變量名前加$且區(qū)分大小寫、字符串拼接用點(.)、保持良好縮進(jìn)提升可讀性。 PHP標(biāo)籤規(guī)範(fàn)為使用,避免多餘空白問題。掌握這些基礎(chǔ)但關(guān)鍵的細(xì)節(jié)有助於提升代碼質(zhì)量與協(xié)作效率。

PHP設(shè)置的關(guān)鍵在於明確安裝方式、配置php.ini、連接Web服務(wù)器及啟用必要擴(kuò)展。 1.安裝PHP:Linux用apt、Mac用Homebrew、Windows推薦XAMPP;2.配置php.ini:調(diào)整錯誤報告、上傳限制等並重啟服務(wù)器;3.搭配Web服務(wù)器:Apache通過mod_php,Nginx使用PHP-FPM;4.安裝常用擴(kuò)展:如mysqli、json、mbstring等以支持完整功能。

寫好PHP註釋的關(guān)鍵在於解釋“為什麼”而非“做什麼”,統(tǒng)一團(tuán)隊註釋風(fēng)格,避免重複代碼式註釋,合理使用TODO和FIXME標(biāo)記。 1.註釋應(yīng)重點說明代碼背後的邏輯原因,如性能優(yōu)化、算法選擇等;2.團(tuán)隊需統(tǒng)一註釋規(guī)範(fàn),如單行註釋用//,函數(shù)類用docblock格式,並包含@author、@since等標(biāo)籤;3.避免僅複述代碼內(nèi)容的無意義註釋,應(yīng)補(bǔ)充業(yè)務(wù)含義;4.使用TODO和FIXME標(biāo)記待辦事項,並可配合工具追蹤,確保註釋與代碼同步更新,提升項目可維護(hù)性。

PHP有五個最常用的超全局變量,分別是$\_GET、$\_POST、$\_SERVER、$\_SESSION和$\_COOKIE。 ①$\_GET用於獲取URL中的參數(shù),適用於分頁、過濾等非敏感數(shù)據(jù)傳遞,但需注意輸入驗證;②$\_POST用於接收表單提交的敏感數(shù)據(jù),如登錄信息,需防範(fàn)SQL注入和XSS攻擊;③$\_SERVER提供服務(wù)器和腳本執(zhí)行環(huán)境的信息,如當(dāng)前腳本名、用戶IP和請求方法,使用前應(yīng)檢查鍵是否存在;④$\_SESSION用於跨頁面保持用戶狀態(tài),使用時必須先調(diào)用session\_st
