Lorsque vous utilisez PHP pour les demandes de réseau, Curl est une bibliothèque très courante qui nous permet de communiquer avec d'autres serveurs HTTP. Cependant, dans certains scénarios, nous devrons peut-être partager certaines ressources (telles que les cookies, les descripteurs de fichiers, etc.) entre plusieurs poignées de boucle. À ce stade, la fonction curl_share_init est utile.
curl_share_init () est une fonction PHP Curl qui est utilisée pour initialiser une poignée partagée. Cette poignée partagée peut être partagée dans plusieurs sessions Curl, ce qui leur permet de partager des ressources spécifiques, telles que des cookies de la session, des résultats de requête DNS, des descripteurs de fichiers, etc.
L'utilisation de curl_share_init () peut éviter le chargement répété de la même ressource entre plusieurs demandes, l'amélioration des performances et la réduction des frais généraux du système. Cette fonction renvoie une poignée partagée, puis vous pouvez configurer des paramètres liés à la poignée partagée via d'autres fonctions (telles que Curl_Setopt ), et enfin libérer la poignée partagée via Curl_share_Close .
<span><span><span class="hljs-variable">$share</span></span><span> = </span><span><span class="hljs-title function_ invoke__">curl_share_init</span></span><span>();
</span></span>
Lorsque cette fonction est appelée, elle renvoie une poignée partagée $ partage , qui partagera les ressources entre plusieurs sessions Curl. Vous pouvez utiliser cette poignée pour définir le comportement des ressources partagées.
Une fois que la poignée partagée est initialisée avec succès, vous pouvez utiliser CURL_SHARE_SETOPT pour définir les ressources qui peuvent être partagées entre plusieurs sessions. Les ressources partagées couramment utilisées comprennent:
Curlopt_share : utilisé pour définir les ressources partagées. Vous pouvez spécifier Curlshopt_share pour partager des ressources, ou curlshopt_unshare pour arrêter de partager des ressources.
Curlshopt_share (cookie partagé) : plusieurs sessions partagent les mêmes données de cookie.
Curlshopt_share (DNS partagé) : plusieurs sessions partagent le même cache de résolution DNS.
Curlshopt_share (descripteur de fichiers partagé) : descripteur de fichier partagé, adapté à plusieurs sessions Curl lorsqu'elles doivent lire le même fichier.
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// Initialiser la poignée partagée</span></span><span>
</span><span><span class="hljs-variable">$share</span></span><span> = </span><span><span class="hljs-title function_ invoke__">curl_share_init</span></span><span>();
</span><span><span class="hljs-comment">// Configurer des ressources partagées(Par exemple, partagercookie)</span></span><span>
</span><span><span class="hljs-title function_ invoke__">curl_share_setopt</span></span><span>(</span><span><span class="hljs-variable">$share</span></span><span>, CURLSHOPT_SHARE, CURL_LOCK_DATA_COOKIE);
</span><span><span class="hljs-comment">// initialisationcURLPoignée1</span></span><span>
</span><span><span class="hljs-variable">$ch1</span></span><span> = </span><span><span class="hljs-title function_ invoke__">curl_init</span></span><span>();
</span><span><span class="hljs-title function_ invoke__">curl_setopt</span></span><span>(</span><span><span class="hljs-variable">$ch1</span></span><span>, CURLOPT_URL, </span><span><span class="hljs-string">'http://example.com'</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">curl_setopt</span></span><span>(</span><span><span class="hljs-variable">$ch1</span></span><span>, CURLOPT_SHARE, </span><span><span class="hljs-variable">$share</span></span><span>);
</span><span><span class="hljs-comment">// initialisationcURLPoignée2</span></span><span>
</span><span><span class="hljs-variable">$ch2</span></span><span> = </span><span><span class="hljs-title function_ invoke__">curl_init</span></span><span>();
</span><span><span class="hljs-title function_ invoke__">curl_setopt</span></span><span>(</span><span><span class="hljs-variable">$ch2</span></span><span>, CURLOPT_URL, </span><span><span class="hljs-string">'http://example.org'</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">curl_setopt</span></span><span>(</span><span><span class="hljs-variable">$ch2</span></span><span>, CURLOPT_SHARE, </span><span><span class="hljs-variable">$share</span></span><span>);
</span><span><span class="hljs-comment">// mettre en œuvrecURLdemander</span></span><span>
</span><span><span class="hljs-title function_ invoke__">curl_exec</span></span><span>(</span><span><span class="hljs-variable">$ch1</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">curl_exec</span></span><span>(</span><span><span class="hljs-variable">$ch2</span></span><span>);
</span><span><span class="hljs-comment">// fermeturecURLPoignée</span></span><span>
</span><span><span class="hljs-title function_ invoke__">curl_close</span></span><span>(</span><span><span class="hljs-variable">$ch1</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">curl_close</span></span><span>(</span><span><span class="hljs-variable">$ch2</span></span><span>);
</span><span><span class="hljs-comment">// fermeture共享Poignée</span></span><span>
</span><span><span class="hljs-title function_ invoke__">curl_share_close</span></span><span>(</span><span><span class="hljs-variable">$share</span></span><span>);
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>
Dans l'exemple ci-dessus, nous initialisons une poignée partagée $ partager et la configurer pour partager les données de cookie. Ensuite, nous créons deux poignées Curl $ ch1 et $ ch2 et les avons définies pour partager la même poignée partagée. Enfin, exécutez la demande et fermez toutes les poignées de curl ainsi que les poignées partagées.
CURL_SHARE_INIT est très utile lors du partage de ressources entre plusieurs demandes Curl, en particulier dans les scénarios suivants:
Partagez des cookies sur plusieurs demandes : si vous exécutez plusieurs demandes HTTP et que ces demandes doivent maintenir la même session (comme l'état de session après la connexion), vous pouvez partager des cookies.
Résolution DNS partagée : si vous faites plusieurs demandes de réseau et que le serveur cible pour ces demandes est sous le même nom de domaine, l'activation du partage DNS peut réduire la surcharge de la résolution DNS.
Descripteur de fichiers partagé : les descripteurs de fichiers partagés aident à optimiser l'efficacité de lecture du fichier lorsque plusieurs demandes de la même ressource de fichier doivent être lues.
Exécution simultanée : lorsque plusieurs sessions Curl partagent la même poignée partagée, assurez-vous de gérer la logique des demandes simultanées pour éviter les conditions de course. Par exemple, une session CURL peut accéder aux ressources partagées en même temps et doit être fileté.
Limitation de ressources partagée : bien que Curl_Share_Init offre la possibilité de partager des ressources, toutes les ressources ne peuvent pas être partagées. Il est important de comprendre les types de ressources partagées que les supports en boucle.
Le cycle de vie d'une poignée partagée : la poignée partagée partage une ressource entre plusieurs sessions Curl, il ne faut donc être fermé qu'après que toutes les sessions Curl ont été exécutées pour s'assurer que la ressource est correctement publiée.
CURL_SHARE_INIT fournit un mécanisme de partage de ressources efficace pour Curl dans PHP, en particulier adapté aux scénarios où certaines ressources doivent être partagées entre plusieurs demandes HTTP. En utilisant raisonnablement les manches partagées, vous pouvez réduire la charge de travail en double et améliorer les performances du programme. La maîtrise de l'utilisation de Curl_Share_Init est d'une grande aide pour améliorer la flexibilité et l'efficacité des opérations Curl.