11

そのため、しばらくの間、次を使用して投稿データが設定されているかどうかを確認しています。

if( ! empty( $_POST ) ) { }

しかし、最近、上記は「ハック」であり、以下は正しい「より良い」方法であるという投稿をたくさん見てきました。

if( $_SERVER[ 'REQUEST_METHOD' ] === 'POST' ) { }

最近とは、最近見つけたばかりという意味です。この後の方法について議論している投稿はすべて2009年のものです。コーディング標準では少し古いので、このトピックについて新鮮な意見を得ても問題ないと思います。

2つの方法が異なることを理解するようになりました。1 つ目は、post 配列が設定されているかどうかをチェックするだけの「ハック」と見なされます。これは、post リクエストが行われた場合に発生します。2 つ目は、実際にサーバーをチェックして、投稿要求が行われたかどうかを確認します。2番目の方がもう少し安全かもしれないと思いますが、とにかく情報がクレンジングされた場合、それがどのように大きな違いを生むかわかりません.

PHP はこの時点でまだグローバルを使用していたため、後者は PHP バージョン <= 4 でのみ使用されたという投稿も見ました。$_REQUESTこれは、PHP コーダーが特定の要求パラメーターのソースを決定するために使用した方法でした。古い投稿で提起されている質問は私のものと同じであるため、最後のステートメントがどれほど正確かはわかりません. 彼らはポストグローバルを使用し、リクエストは使用しません。ただし、これは他のどの投稿よりも最近の投稿 (2011 年) であり、信頼できる情報源からのものです。だから私はそれをどうするかわかりません。

そして、get をチェックするときに何をすべきか? サーバーリクエストメソッドがこのインスタンスでは機能していないようだと言っている場所をいくつか見てきました.postがgetに取って代わり、リクエストメソッドが1つのパラメーターしか保持できないためだと推測できます. 投稿データと取得データの両方がある場合、どうしますか? これらの投稿の 1 つに対するコメントは、post と get の代わりに request global を使用することを提案していますが、それは悪い考えであるという印象を受けてきました。

これは私が見つけた最新の情報源であり、送信する前に横にある同様の質問に目を通しました. 送信値を使用してフォームが渡されたかどうかを確認することについて具体的に尋ねていますが、リクエストメソッドについても言及しています。その多くは、後者がまだ一般的に使用されていることを示しているようです。それで、このアドバイスはまだ有効ですか?リクエストメソッドをチェックすることはまだ最良の選択肢ですか?

4

2 に答える 2

10

はい、まだ存在し、100% 信頼できます。var は、$_SERVER["REQUEST_METHOD"]ユーザーの接続で使用される実際のリクエスト メソッドに基づいて、PHP 自体によって設定されます。ユーザーは、リクエストのタイプを変更する以外に、クエリ パラメータを送信したり、その var の値に影響を与えたりすることはできません。

投稿を実行してもデータを送信できないため、信頼できません。たとえば、次のようになりif(!$_POST)ます。

<form method="post">
<input type="submit" />
</form>

このような空の $_POST 配列が生成されます。フォームには名前付きのフォーム要素がないため、データは送信されませんが、POST はまだ実行されています。

PHP4 にこのスーパーグローバルがないことを心配する必要はありません。PHP 4 は石器時代のバージョンであり、v4 をサポートしているが v5 に基づいて構築されたコードには、下位互換性を実現するために非常に多くの醜い/嫌なハックが含まれている必要があるため、そのコードで作業する必要がある人は悪夢に悩まされることになります。PHP 4 は死んでしまったと考えるべきです。

于 2012-06-12T15:05:24.290 に答える
5

私は常に$_SERVER['REQUEST_METHOD'];変数を使用してリクエストメソッドをチェックします。

この変数は、リクエストが' GET'、' HEAD'、' POST'、または' PUT'リクエストであるかどうかも示します。

http://php.net/manual/en/reserved.variables.server.php

于 2012-06-12T15:05:52.510 に答える