ホームページ > バックエンド開発 > PHPチュートリアル > php://input に $_POST 値が存在するにもかかわらず、一部の値が欠落しているのはなぜですか?

php://input に $_POST 値が存在するにもかかわらず、一部の値が欠落しているのはなぜですか?

DDD
リリース: 2024-10-29 07:01:02
オリジナル
502 人が閲覧しました

Why Are Some $_POST Values Missing When Present in php://input?

php://input に存在する場合に PHP $_POST 値が欠落する

POST 経由で大きな HTML フォームを送信する場合、一部の $_POST 値が PHP で欠落する可能性があります。これは、php://input 経由でアクセスできる生のリクエスト本文に値が存在するにもかかわらず発生します。

この問題は、PHP が非推奨の register_globals に準拠するようにフィールド名のスペースやドットなどの特定の文字を変更するために発生します。設定。その結果、一部のキーが変更され、$_POST に存在しない可能性があります。

この問題を解決するには、次の回避策を検討してください。

回避策

  1. カスタム関数: php://input を解析し、変更されたフィールド名を考慮して正しい $_POST 配列を再構築する関数を作成します。
<code class="php">function getRealPOST() {
    $pairs = explode("&amp;", file_get_contents("php://input"));
    $vars = array();
    foreach ($pairs as $pair) {
        $nv = explode("=", $pair);
        $name = urldecode($nv[0]);
        $value = urldecode($nv[1]);
        $vars[$name] = $value;
    }
    return $vars;
}</code>
ログイン後にコピー
  1. register_globals を無効にする: フィールド名の変更を防ぐには、PHP 構成で register_globals を「オフ」に設定します。ただし、 register_globals はセキュリティ上のリスクがあるため、これはお勧めできません。
  2. フィールド名の URL エンコード: 特殊文字が変更されないように、urlencode() を使用して HTML フォーム内のフィールド名をエンコードします。

たとえば、HTML フラグメント:

<code class="html"><input type="text" name="my_field.value" value="test"></code>
ログイン後にコピー

PHP コード:

<code class="php">$my_field_value = $_POST['my_field.value'];</code>
ログイン後にコピー
  1. 大きなフォームには別の方法を使用します。 multipart/form-data など、大きなフォームの処理やフィールド名の保持に適した代替方法の使用を検討してください。

以上がphp://input に $_POST 値が存在するにもかかわらず、一部の値が欠落しているのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート