1

了解しました。私の友人は、ヘッダーを要求し、ヘッダーがどうあるべきかと比較するためのこのコードを私にくれました。完璧に動作しますが、理由はわかりません。コードは次のとおりです。

    $headers = apache_request_headers(); 
    $customheader = "Header: 7ddb6ffab28bb675215a7d6e31cfc759"; 
    foreach ($headers as $header => $value) { // 1
        $custom .= "$header: $value"; // 2
    }
    $mystring = $custom;  // 3
    $findme   = $customheader; // 4
    $pos = strpos($mystring, $findme); 
    if ($pos !== false) {
// Do something
} else{ exit(); } //If it doesn't match, exit.

次の質問に関連するいくつかの番号でコメントしました。

  1. ここで何が起こっているのですか?$headersを$headerAND $ valueとして設定していますか?

  2. 繰り返しになりますが、ここで何が起こっているのかわかりません。

  3. なぜ変数を別の変数に設定するのですか?これは変数が使用されている唯一の領域ですが、それを他の何かに設定する理由はありますか?

  4. 3と同じ質問。

これがひどい質問であるならば申し訳ありませんが、それは私を悩ませています、そして私はそれがなぜ働くのか本当に知りたいです。ええと、なぜそれが機能するのか理解しています。もっと具体的に知りたいだけだと思います。あなたが提供できる洞察に感謝します。

4

3 に答える 3

3
 $headers = apache_request_headers(); 

ヘッダー配列を取得します。

    $customheader = "Header: 7ddb6ffab28bb675215a7d6e31cfc759"; 

検索する「カスタムヘッダー」を定義します。

    foreach ($headers as $header => $value) { // 1
        $custom .= "$header: $value"; // 2
    }

ループして、展開されたヘッダー$customを保持する変数を作成します。$key=>$value

    $mystring = $custom;  // 3
    $findme   = $customheader; // 4
    $pos = strpos($mystring, $findme); 

展開された文字列で を探し$customheaderます。

    if ($pos !== false) {
// Do something
} else{ exit(); } //If it doesn't match, exit.

変数の再割り当ては実際には必要ありません。本質的には、ヘッダーの配列を取得し、それを 1 つの大きな文字列に変換してから、$customheaderテキストが存在するかどうかを検索します。

于 2010-04-24T02:36:51.043 に答える
1
  1. $headers を繰り返し処理し、各要素のキーを $header に、値を $value に割り当てます。したがって、ブロック内では、ヘッダーの名前とその値を別々の変数で取得します。
  2. このステップでは、ドット演算子を使用してすべてのヘッダーを 1 つの文字列に連結します。基本的に、ヘッダーを配列から文字列に変換しています。
  3. これらの変数が他の場所で使用されない限り、再割り当ての理由はありません。

免責事項: 私はルビー派なので、間違っていたら訂正してください。

于 2010-04-24T02:35:34.747 に答える
1

apache_request_headers()HTTPは、現在のリクエストのすべてのヘッダーの連想配列を返しfalse、失敗した場合に返します。したがって、戻り値を次のように確認することをお勧めします。

$headers = apache_request_headers(); 
if(! $headers) {
 die("Error fetching headers");
}

1: 取得した連想配列を反復しています。
2: キーと値をコロンで区切って、配列内に接着されたキーと値のペアの文字列を形成します。
3 と 4 は、ある変数を別の変数に代入しているだけです。$pos = strpos($custom, $customheader);手順 3 と 4 の代わりに: を直接使用すること もできstrposます。false$customheader$custom

全体として、このスニペットは、によって返されるヘッダーにカスタム ヘッダーが存在するかどうかを確認しますapache_request_headers

于 2010-04-24T02:43:58.257 に答える