ストリームコンテキストは、PHPで使用されて、ストリームのプロパティと動作を構成します。ストリームコンテキストを通じて、開発者はさまざまな種類のストリーム操作を定義し、ストリームの読み取りと書き込み、リソースオープンなどを指定できます。ストリームコンテキストは、実際には、PHPがストリーム操作に関連するさまざまなオプションを設定するために使用するストリーム関連オプションを含む配列またはリソースです。
一般的なストリームコンテキスト設定には、以下が含まれます。
stream.wrapper_data :ストリームラッパーの構成を指定するために使用されます。
HTTP :リクエストヘッダー、プロキシサーバーなど、HTTPストリームを設定するために使用されるオプション。
SSL :証明書、パスワードなど、SSL接続を構成するための関連オプション。
たとえば、ストリームコンテキストを作成するコードは次のとおりです。
<span><span><span class="hljs-variable">$options</span></span><span> = </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">"method"</span></span><span> => </span><span><span class="hljs-string">"GET"</span></span><span>,
</span><span><span class="hljs-string">"header"</span></span><span> => </span><span><span class="hljs-string">"Accept-language: en\r\n"</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-variable">$options</span></span><span>);
</span></span>
ストリームコンテキストは、stream_context_create()関数を介して作成され、ファイル操作またはネットワークストリーム操作で使用できます。
Stream_notification_callbackは、PHPのストリームに関連するコールバック関数です。この関数は、ストリーム操作の通知を受信および処理するために使用されます。ストリーミング操作には、いくつかの特別なイベント(ファイルの開く失敗、ネットワーク接続の割り込みなど)が含まれる場合、PHPはコールバック関数を介して開発者に通知できます。基本的な構文は次のとおりです。
<span><span><span class="hljs-title function_ invoke__">stream_context_set_option</span></span><span>(</span><span><span class="hljs-variable">$context</span></span><span>, </span><span><span class="hljs-string">"notification"</span></span><span>, </span><span><span class="hljs-string">"callback"</span></span><span>, </span><span><span class="hljs-string">"stream_notification_callback"</span></span><span>);
</span></span>
stream_notification_callbackは、通知情報を含むパラメーターを受信し、フロー操作のさまざまな状態に応じて開発者が反応できるようにします。
リソース$ストリーム:現在の通知に関連するストリーミングリソースを表します。
int $ notification_code :通知のタイプは、 stream_notify_connect 、 stream_notify_disconnectなどの定数で表されます。
int $の重大度:通知の重大度、通常は整数であり、問題が高いほど、問題がより深刻になります。
文字列$メッセージ:通知されたメッセージ、現在のフロー状態に関する情報を提供します。
コールバック関数の関数は、開発者がこれらの通知をキャプチャして応答できるようにすることです。たとえば、ストリーム接続が失敗した場合、開発者はコールバック関数でこの情報をキャプチャし、接続の再試行、エラーログの記録など、対応する測定を実行できます。
Stream_notification_callbackとStreamコンテキストの間には密接な接続があります。 Streamの通知をストリーム操作に処理するメカニズムとして、開発者がStream_Notification_Callbackを統合できるのは、ストリームコンテキストのコールバック設定を介しています。具体的には、 Stream_Context_set_option関数により、開発者はストリームコンテキストで通知イベントのコールバック関数を設定できます。
たとえば、ネットワークストリームを作成してコールバック関数を設定するとき、開発者は次のコードを使用できます。
<span><span><span class="hljs-variable">$options</span></span><span> = </span><span><span class="hljs-keyword">array</span></span><span>(
</span><span><span class="hljs-string">"notification"</span></span><span> => </span><span><span class="hljs-keyword">array</span></span><span>(
</span><span><span class="hljs-string">"callback"</span></span><span> => </span><span><span class="hljs-string">"stream_notification_callback"</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-variable">$options</span></span><span>);
</span><span><span class="hljs-variable">$fp</span></span><span> = </span><span><span class="hljs-title function_ invoke__">stream_socket_client</span></span><span>(</span><span><span class="hljs-string">"tcp://example.com:80"</span></span><span>, </span><span><span class="hljs-variable">$errno</span></span><span>, </span><span><span class="hljs-variable">$errstr</span></span><span>, </span><span><span class="hljs-number">30</span></span><span>, STREAM_CLIENT_CONNECT, </span><span><span class="hljs-variable">$context</span></span><span>);
</span></span>
上記のコードでは、 Stream_Socket_Client()関数がTCP接続を開き、カスタムコールバック関数をストリームコンテキストにバインドします。これにより、接続中に通知イベントが発生した場合、PHPはStream_Notification_Callbackを自動的に呼び出します。
PHPのStream_Notification_Callbackは、複数のタイプの通知をキャプチャできます。一般的な通知タイプとその意味は次のとおりです。
stream_notify_connect :ストリームが正常に接続されていることを示します。
stream_notify_disconnect :ストリームが切断されていることを示します。
stream_notify_failure :ストリーム操作が失敗したことを示します。
stream_notify_auth_required :ストリーミング操作には認証情報が必要であることを示します。
開発者は、これらの通知タイプに基づいて特定の応答ロジックを記述できます。たとえば、接続が失敗した場合、再接続を試みることができます。認証要求が発生した場合、認証資格情報などを提供できます。