Dans PHP, Stream_Context_get_Options () est une fonction très pratique pour obtenir des options dans un contexte de flux. Le contexte de flux est créé via la fonction Stream_Context_Create () pour définir le comportement d'un certain flux (comme l'en-tête d'une demande HTTP, des paramètres de proxy, etc.). Cependant, de nombreux développeurs rencontrent souvent un problème lors de l'utilisation de Stream_Context_get_Options () : le résultat renvoyé est une structure de tableau imbriquée, ce qui entraîne une certaine confusion dans le traitement ultérieur. Cet article explorera ce problème en profondeur et comment le résoudre.
Tout d'abord, jetons un coup d'œil à utiliser Stream_Context_get_Options () et la structure qu'il renvoie.
Supposons que nous utilisons le code suivant pour créer un contexte de flux et obtenir ses options:
<?php
$options = [
'http' => [
'method' => 'GET',
'header' => 'User-Agent: PHP',
],
];
$context = stream_context_create($options);
$optionsReturned = stream_context_get_options($context);
print_r($optionsReturned);
?>
Le résultat de sortie est à peu près comme ceci:
Array
(
[http] => Array
(
[method] => GET
[header] => User-Agent: PHP
)
)
Comme vous pouvez le voir, Stream_Context_get_Options () renvoie un tableau associatif imbriqué . Dans cet exemple, le tableau le plus externe contient un sous-réseau avec le nom de clé HTTP , et le sous-réseau HTTP contient des informations telles que la méthode et l'en-tête .
La raison de conception de Stream_Context_get_Options () à retourner les tableaux imbriqués est étroitement lié à la structure du contexte de flux de PHP lui-même. Le contexte de streaming n'est pas limité aux demandes HTTP, c'est une collection qui peut contenir plusieurs paramètres de protocole différents. Par exemple, en plus de HTTP, il peut également y avoir des protocoles tels que FTP , SSL et File . Par conséquent, pour pouvoir accueillir une variété de différents types d'options de streaming, PHP a conçu une structure imbriquée à plusieurs niveaux. Cette structure permet de spécifier différentes options pour chaque protocole, qui peut exister indépendamment à différents niveaux.
Lorsque vous devez obtenir des options spécifiques à partir du tableau imbriqué renvoyé par Stream_Context_get_Options () , vous devez être prudent avec cette structure imbriquée. Par exemple, si vous souhaitez accéder à l'option de méthode sous le protocole HTTP, vous pouvez utiliser les méthodes suivantes:
$method = $optionsReturned['http']['method'];
echo $method; // Sortir 'GET'
Si vous ignorez accidentellement cette structure imbriquée, elle peut entraîner des erreurs de code ou ne pas obtenir la bonne valeur. Par conséquent, assurez-vous d'accéder aux noms de clés corrects lors de l'analyse et de comprendre comment ces clés sont organisées hiérarchiquement.
Vérifiez si le nom de la clé de protocole existe : Lorsque vous accédez aux valeurs dans des tableaux imbriqués, vérifiez d'abord si la clé de protocole correspondante existe. Par exemple:
if (isset($optionsReturned['http'])) {
// Accéder en toute sécurité http Options liées au protocole
$method = $optionsReturned['http']['method'];
}
Gestion de plusieurs situations de protocole : si vous traitez avec des contextes de streaming de plusieurs protocoles, vous pouvez analyser les options pour chaque protocole via des boucles ou une logique plus complexe. Par exemple:
foreach ($optionsReturned as $protocol => $options) {
echo "Protocol: $protocol\n";
print_r($options);
}
Cela vous permettra de parcourir tous les protocoles et de voir les options sous chaque protocole.
Dans certaines applications pratiques, vous souhaiterez peut-être remplacer le nom de domaine dans certaines adresses URL dans le contexte de streaming par d'autres noms de domaine. Par exemple, remplacez le nom de domaine dans toutes les URL du code par m66.net . Supposons qu'il existe des URL dans votre code, vous pouvez utiliser le code suivant pour l'implémenter: