La fonction Stream_Context_get_Options est utilisée pour obtenir des options dans le contexte de flux spécifié. Le contexte du flux est un mécanisme fourni par PHP pour configurer le comportement des flux. Par exemple, lorsque vous effectuez des opérations de fichiers ou des demandes HTTP, vous pouvez définir des options spécifiques (telles que proxy, délai d'expiration, authentification, etc.) qui sont généralement transmises dans le contexte du flux.
Le prototype de la fonction est le suivant:
<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 : il s'agit d'un flux ouvert ou d'une ressource de contexte de flux. Si le entrant est une ressource de flux, il extrait automatiquement les options du contexte du flux.
stream_context_get_options renvoie un tableau associatif. Ce tableau contient toutes les options liées au contexte du flux. Les clés de chaque option sont généralement un type de protocole (tel que "HTTP", "FTP", etc.), et chaque type de protocole contient des paramètres pertinents ci-dessous.
<span><span><span class="hljs-keyword">array</span></span><span>(
</span><span><span class="hljs-string">'Nom de l'accord'</span></span><span> => </span><span><span class="hljs-keyword">array</span></span><span>(
</span><span><span class="hljs-string">'Options1'</span></span><span> => </span><span><span class="hljs-string">'valeur1'</span></span><span>,
</span><span><span class="hljs-string">'Options2'</span></span><span> => </span><span><span class="hljs-string">'valeur2'</span></span><span>,
...
),
...
)
</span></span>
Par exemple, si vous définissez un proxy et un délai d'expiration pour une demande HTTP, le tableau renvoyé ressemblera à ceci:
<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>
Si aucune option n'est définie, le tableau renvoyé sera un tableau vide.
Un scénario typique est lors de l'exploitation d'un flux de fichiers, de demandes HTTP ou d'autres protocoles, le programme peut avoir besoin de vérifier si la configuration du contexte de flux est correcte. Par exemple, lorsque vous utilisez File_get_Contents pour lire les fichiers distants, vous pouvez avoir configuré un proxy HTTP. Vous pouvez utiliser stream_context_get_options pour afficher les paramètres de proxy pour le contexte actuel:
<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>
Sortir:
<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>
De cette façon, nous pouvons vérifier les paramètres du contexte du flux à tout moment pour nous assurer qu'ils sont comme prévu.
L'option pour afficher le contexte de flux aide à résoudre les problèmes lors du débogage des demandes de réseau. Par exemple, vous pouvez confirmer que les paramètres de proxy, les en-têtes de demande ou la configuration du délai d'attente sont corrects. Si le programme rencontre des problèmes de réseau, la visualisation des informations de configuration du contexte de streaming peut vous aider à localiser rapidement le problème. Par exemple, lors de l'envoi de demandes HTTP, le proxy peut ne pas être accessible ou le paramètre de délai d'expiration est trop faible et vous pouvez imprimer la configuration à confirmer.
Dans certains cas, vous souhaiterez peut-être modifier certaines options dans le contexte du flux et obtenir ces options modifiées dynamiquement. Par exemple, si vous devez modifier les paramètres de proxy dans plusieurs demandes, vous pouvez obtenir la configuration actuelle via Stream_Context_get_Options et apporter des modifications en fonction de cela. Cela évite de réinitialiser toutes les options à chaque fois et réduit les configurations redondantes.
<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">// Obtenez la configuration actuelle</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">// Modifier le paramètre de délai d'expiration</span></span><span>
</span><span><span class="hljs-comment">// 使用修改后的Options进行操作</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 est souvent utilisé avec d'autres fonctions liées à Stream, telles que Stream_Socket_Client , FOpen , File_get_Contents , etc. Par exemple, après avoir ouvert une connexion FTP, vous pouvez utiliser Stream_Context_get_Options pour obtenir la configuration FTP actuelle:
<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 ne s'applique qu'aux ressources contextuelles créées via Stream_Context_Create ou autrement. S'il n'y a pas de contexte de contexte ou de flux sans contexte, il renvoie un tableau vide.
Le tableau d'options renvoyé est classé par protocole comme clé. Par exemple, le protocole HTTP a un ensemble d'options et le protocole FTP a un autre ensemble d'options, vous devez donc effectuer les opérations correspondantes en fonction du type de protocole.