Bei Verwendung der Curl -Bibliothek von PHP für Netzwerkanforderungen erstellen wir normalerweise ein separates Curl -Handle ( curl_init () ) für den Betrieb. Curl_Share_init () und curl_share_setopt () sind jedoch nützlich, wenn wir einige Daten zwischen mehreren COLL -Handles (wie Cookies, DNS -Caches oder SSL -Sitzungen usw.) teilen müssen.
In diesem Artikel wird detailliert analysiert, wie diese Funktionen verwendet werden und wie die Freigabemechanismen der Ressourcenfreigabe und die Absage von Sharing -Mechanismen über Curlshopt_Share und Curlshopt_unshare implementiert werden können.
In Curl ist jeder Curl -Handle standardmäßig unabhängig. Wenn Sie mehrere interne Daten teilen müssen (z. B. Cache für DNS -Auflösung, Cookie -Daten oder SSL -Sitzungs -Cache), können Sie das "Freigabe -Handle" verwenden.
PHP liefert die folgenden verwandten Funktionen:
curl_share_init () : initialisieren Sie einen gemeinsam genutzten Griff.
curl_share_setopt () : Stellen Sie die Freigabeoptionen für gemeinsam genutzte Handles fest.
curl_share_close () : Schließen Sie den gemeinsam genutzten Griff.
Entsprechende Optionen:
Curlshopt_Share : Gibt den zum Freigeben von Ressourcentyp an.
Curlshopt_unshare : Gibt die Art der Ressource an, die nicht gehabt werden soll.
Angenommen, wir haben zwei verschiedene Curl -Anfragen und möchten, dass sie dieselben Cookie -Daten teilen. Auf diese Weise kann das Cookie für die erste Anfrage und die zweite Anfrage automatisch verwendet werden.
<?php
// Initialisieren Sie den gemeinsam genutzten Griff
$sh = curl_share_init();
// Richten Sie gemeinsam genutzte Inhalte ein,Wir teilen hier Cookie
curl_share_setopt($sh, CURLSHOPT_SHARE, CURL_LOCK_DATA_COOKIE);
// Initialisieren Sie den ersten cURL Handhaben
$ch1 = curl_init();
curl_setopt($ch1, CURLOPT_URL, "https://m66.net/page1");
curl_setopt($ch1, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch1, CURLOPT_SHARE, $sh);
$response1 = curl_exec($ch1);
curl_close($ch1);
// Initialisieren Sie die zweite cURL Handhaben
$ch2 = curl_init();
curl_setopt($ch2, CURLOPT_URL, "https://m66.net/page2");
curl_setopt($ch2, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch2, CURLOPT_SHARE, $sh);
$response2 = curl_exec($ch2);
curl_close($ch2);
// Teilen abbrechen Cookie
curl_share_setopt($sh, CURLSHOPT_UNSHARE, CURL_LOCK_DATA_COOKIE);
// 关闭共享Handhaben
curl_share_close($sh);
// Ausgangsergebnis
echo "Response 1:\n$response1\n";
echo "Response 2:\n$response2\n";
?>
1 ?? curl_share_init ()
Wir rufen zunächst curl_share_init () auf, um ein gemeinsam genutztes Handle $ sh zu erstellen, das speziell zum Verwalten der zu gemeinsam genutzten Daten verwendet wird.
2 ?? curl_share_setopt ($ sh, curlshopt_share, curl_lock_data_cookie)
Hier geben wir die gemeinsam genutzten Cookie -Daten an. Curl_lock_data_cookie repräsentiert Cookie -Daten, und andere verfügbare Werte gehören:
Curl_lock_data_dns (DNS -Cache)
CURL_LOCK_DATA_SSL_SESSION (SSL -Sitzung)
Sie können mehrmals curl_share_setopt () aufrufen, um eine Vielzahl von Daten zu teilen.
3 ?? Curlopt_share
Jeder Curl -Handle ( $ CH1 , $ CH2 ) muss an das freigegebene Griff $ sh über curlopt_share gebunden sein, damit sie die angegebenen Daten freigeben können.
4 ?? curl_share_setopt ($ sh, curlshopt_unshare, curl_lock_data_cookie)
Wenn Sie bestimmte Daten nicht mehr teilen, können Sie angeben, dass Sie die Freigabe mit curlshopt_unshare abbrechen. HINWEIS: Unshare storniert nur die Freigabe dieser Art von Daten, aber das gemeinsame Griff kann weiterhin verwendet werden.
5 ?? curl_share_close ($ sh)
Veröffentlichen Sie schließlich die freigegebene Handlungsressource. Beachten Sie, dass dieser Schritt erforderlich ist, andernfalls kann er Speicherlecks verursachen.
Gemeinsame Griffe sind nur innerhalb desselben Prozesses gültig.
Nicht alle Datentypen sind für die Freigabe geeignet, und es sind bestimmte Szenarien erforderlich, wenn sie in tatsächlichen Anwendungen angewendet werden.
Verwenden Sie gemeinsame Griffe in Umgebungen mit mehreren Threaded, um die Sicherheit der Gewinde zu gewährleisten.