stream_context_get_options関数は、指定されたストリームコンテキストでオプションを取得するために使用されます。ストリームコンテキストは、PHPが提供するメカニズムであり、ストリームの動作を構成します。たとえば、ファイル操作またはHTTPリクエストを実行すると、通常、ストリームコンテキストを通過する特定のオプション(プロキシ、タイムアウト、認証など)を設定できます。
関数のプロトタイプは次のとおりです。
<span><span><span class="hljs-keyword">array</span></span><span> </span><span><span class="hljs-title function_ invoke__">stream_context_get_options</span></span><span>(resource </span><span><span class="hljs-variable">$stream_or_context</span></span><span>);
</span></span>
$ stream_or_context :これは、オープンストリームまたはストリームコンテキストリソースです。受信がストリームリソースである場合、ストリームのコンテキストからオプションを自動的に抽出します。
stream_context_get_options連想配列を返します。この配列には、ストリームコンテキストに関連するすべてのオプションが含まれています。通常、各オプションのキーはプロトコルタイプ(「HTTP」、「FTP」など)であり、各プロトコルタイプには以下に関連する設定が含まれています。
<span><span><span class="hljs-keyword">array</span></span><span>(
</span><span><span class="hljs-string">'契約名'</span></span><span> => </span><span><span class="hljs-keyword">array</span></span><span>(
</span><span><span class="hljs-string">'オプション1'</span></span><span> => </span><span><span class="hljs-string">'価値1'</span></span><span>,
</span><span><span class="hljs-string">'オプション2'</span></span><span> => </span><span><span class="hljs-string">'価値2'</span></span><span>,
...
),
...
)
</span></span>
たとえば、HTTPリクエストにプロキシとタイムアウトを設定した場合、返された配列は次のようになります。
<span><span><span class="hljs-keyword">array</span></span><span>(
</span><span><span class="hljs-string">'http'</span></span><span> => </span><span><span class="hljs-keyword">array</span></span><span>(
</span><span><span class="hljs-string">'proxy'</span></span><span> => </span><span><span class="hljs-string">'tcp://proxy.example.com:8080'</span></span><span>,
</span><span><span class="hljs-string">'timeout'</span></span><span> => </span><span><span class="hljs-number">30</span></span><span>,
),
)
</span></span>
オプションが設定されていない場合、返された配列は空の配列になります。
典型的なシナリオは、ファイルのストリーム、HTTPリクエスト、またはその他のプロトコルを操作する場合、プログラムは、ストリームコンテキストの構成が正しいかどうかを確認する必要がある場合があります。たとえば、 file_get_contentsを使用してリモートファイルを読み取ると、HTTPプロキシを設定している可能性があります。 Stream_context_get_optionsを使用して、現在のコンテキストのプロキシ設定を表示できます。
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-variable">$context</span></span><span> = </span><span><span class="hljs-title function_ invoke__">stream_context_create</span></span><span>([
</span><span><span class="hljs-string">'http'</span></span><span> => [
</span><span><span class="hljs-string">'proxy'</span></span><span> => </span><span><span class="hljs-string">'tcp://proxy.example.com:8080'</span></span><span>,
</span><span><span class="hljs-string">'timeout'</span></span><span> => </span><span><span class="hljs-number">60</span></span><span>
]
]);
</span><span><span class="hljs-variable">$options</span></span><span> = </span><span><span class="hljs-title function_ invoke__">stream_context_get_options</span></span><span>(</span><span><span class="hljs-variable">$context</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$options</span></span><span>);
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>
出力:
<span><span><span class="hljs-title function_ invoke__">Array</span></span><span>
(
[http] => </span><span><span class="hljs-title function_ invoke__">Array</span></span><span>
(
[proxy] => </span><span><span class="hljs-attr">tcp</span></span><span>://proxy.example.</span><span><span class="hljs-attr">com</span></span><span>:</span><span><span class="hljs-number">8080</span></span><span>
[timeout] => </span><span><span class="hljs-number">60</span></span><span>
)
)
</span></span>
このようにして、いつでもストリームコンテキストの設定を確認して、予想通りであることを確認できます。
フローコンテキストを表示するオプションは、ネットワークリクエストをデバッグするときに問題のトラブルシューティングに役立ちます。たとえば、プロキシ設定、リクエストヘッダー、またはタイムアウト構成が正しいことを確認することをお勧めします。プログラムがネットワークの問題に遭遇した場合、ストリーミングコンテキストの構成情報を表示すると、問題をすばやく見つけることができます。たとえば、HTTPリクエストを送信する場合、プロキシにアクセスできない場合や、タイムアウト設定が低すぎる場合があり、構成を印刷して確認できます。
場合によっては、ストリームコンテキストで特定のオプションを変更し、これらの変更されたオプションを動的に取得することをお勧めします。たとえば、複数のリクエストでプロキシ設定を変更する必要がある場合は、 Stream_context_get_optionsを介して現在の構成を取得し、これに基づいて変更を加えることができます。これにより、毎回すべてのオプションがリセットされないようになり、冗長な構成が削減されます。
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-variable">$context</span></span><span> = </span><span><span class="hljs-title function_ invoke__">stream_context_create</span></span><span>([
</span><span><span class="hljs-string">'http'</span></span><span> => [
</span><span><span class="hljs-string">'timeout'</span></span><span> => </span><span><span class="hljs-number">30</span></span><span>
]
]);
</span><span><span class="hljs-comment">// 現在の構成を取得します</span></span><span>
</span><span><span class="hljs-variable">$options</span></span><span> = </span><span><span class="hljs-title function_ invoke__">stream_context_get_options</span></span><span>(</span><span><span class="hljs-variable">$context</span></span><span>);
</span><span><span class="hljs-variable">$options</span></span><span>[</span><span><span class="hljs-string">'http'</span></span><span>][</span><span><span class="hljs-string">'timeout'</span></span><span>] = </span><span><span class="hljs-number">60</span></span><span>; </span><span><span class="hljs-comment">// タイムアウト設定を変更します</span></span><span>
</span><span><span class="hljs-comment">// 使用修改后的オプション进行操作</span></span><span>
</span><span><span class="hljs-variable">$context</span></span><span> = </span><span><span class="hljs-title function_ invoke__">stream_context_create</span></span><span>([</span><span><span class="hljs-string">'http'</span></span><span> => </span><span><span class="hljs-variable">$options</span></span><span>[</span><span><span class="hljs-string">'http'</span></span><span>]]);
</span><span><span class="hljs-title function_ invoke__">file_get_contents</span></span><span>(</span><span><span class="hljs-string">'http://example.com'</span></span><span>, </span><span><span class="hljs-literal">false</span></span><span>, </span><span><span class="hljs-variable">$context</span></span><span>);
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>
stream_context_get_optionsは、 stream_socket_client 、 fopen 、 file_get_contentsなどの他のストリーム関連関数でよく使用されます。たとえば、FTP接続を開いた後、 Stream_context_get_get_optionsを使用して現在のFTP構成を取得できます。
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-variable">$context</span></span><span> = </span><span><span class="hljs-title function_ invoke__">stream_context_create</span></span><span>([
</span><span><span class="hljs-string">'ftp'</span></span><span> => [
</span><span><span class="hljs-string">'timeout'</span></span><span> => </span><span><span class="hljs-number">60</span></span><span>,
]
]);
</span><span><span class="hljs-variable">$stream</span></span><span> = </span><span><span class="hljs-title function_ invoke__">fopen</span></span><span>(</span><span><span class="hljs-string">'ftp://example.com/file.txt'</span></span><span>, </span><span><span class="hljs-string">'r'</span></span><span>, </span><span><span class="hljs-literal">false</span></span><span>, </span><span><span class="hljs-variable">$context</span></span><span>);
</span><span><span class="hljs-variable">$options</span></span><span> = </span><span><span class="hljs-title function_ invoke__">stream_context_get_options</span></span><span>(</span><span><span class="hljs-variable">$stream</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$options</span></span><span>);
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>
stream_context_get_optionsは、 stream_context_createまたはその他を介して作成されたコンテキストリソースにのみ適用されます。コンテキストセットまたはコンテキストのないストリームがない場合、空の配列を返します。
返されたオプションアレイは、プロトコルによってキーとして分類されます。たとえば、 HTTPプロトコルには1つのオプションがあり、 FTPプロトコルには別のオプションセットがあるため、プロトコルタイプに応じて対応する操作を行う必要があります。