PHP 8.4 は 11 月にリリースされました。あなたとあなたのチームは疑いの余地がありません 新機能、非推奨事項、および この言語の最新の反復に伴う変更。これ 非 POST HTTP 動詞への変更が含まれています。
このブログでは、私は歩きます PHP の HTTP 動詞の背景を通して、HTTP がなぜ使われるのかを説明します。 PHP 8.4 での動詞の変更が問題です。次に、開発者向けのガイドを提供します これらの変更をコード内に実装するときに参照します。
PHP Web を念頭に置いて開発され、Web からのフォーム処理をサポートしていました。 最初の頃。もともと HTTP には基本的に 2 つしかありませんでした。 ブラウザが Web ページをリクエストできるメソッド: GET または POST。 HTML フォームはまだ実際にはこれら 2 つのメソッドのみをサポートしていますが、 JavaScript には、任意の HTTP メソッドを使用して 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 = [ '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 の学習と開始を非常に容易にする理由の 1 つです。
さらに、コンテンツ タイプ multipart/form-data も処理できます。これにより、ブラウザーはフォーム データの提供に加えてファイルをアップロードできるようになります。その際、追加の $_FILES が設定されます。 スーパーグローバル: アップロードされたファイルに関する情報を提供します。 開発者は、保存する前にそれらのファイルを検証して前処理できます。
があります。 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
が導入されました。
関数は、いつもと同じ方法で受信リクエストを解析します。
POST リクエスト用ですが、代わりの変数を指定することもできます。
フォーム データとファイルのアップロードを保存します (またはスーパーグローバルを上書きします)。
お好みであれば)。 $options 引数を使用してパーサーの動作を変更することもできます。詳細については以下で説明します。
一般的なパターンは次のとおりです。
<?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 開発者としてすでに慣れ親しんだターンキー動作です。それ これ以上に優れたものはありません!
Now PHP 8.4 での HTTP 動詞の変更について説明しました。次に見てみましょう。 これらを使用および適用する方法について、いくつかの例を見てみましょう。
POST リクエストと同様に、request_parse_body() は次のコンテンツを含むリクエストのみを解析します。タイプ:
application/x-www-の場合form-urlencoded、$_FILES に相当するもの 配列 (返された配列のインデックス 1) は空になります。コンテンツの場合 型がサポートされていない場合、関数は InvalidArgumentException をスローします。
PHP では、php://input ストリームを介して生のリクエスト コンテンツを検査できます。これはバッファリングされたストリームであり、(PHP 7.4 以降では) 複数回読み取ることができます。ただし、multipart/form-data受信時は コンテンツの場合、PHP は少し破壊的になります。これには非常に正当な理由があります: バッファリング ファイルにより、ファイルの内容がディスクに 2 回書き込まれる可能性があります。 メモリ、ストレージ、I/O の使用量が増加します。
そのため、php://input を破壊的に消費するため、request_parse_body() を 2 回呼び出してはなりません。
request_parse_body() の $options パラメータを使用すると、次のパラメータに依存するのではなく、実行時にその動作を変更できます。ハードコーディングされた php.ini 設定。
以上がPHP 8.4 での HTTP 動詞の変更の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。