Aktueller Standort: Startseite> Neueste Artikel> curl_share_setopt (), das in Verbindung mit Curlshopt_Share, Curlshopt_unshare verwendet wird, detaillierte Erläuterung verwendet

curl_share_setopt (), das in Verbindung mit Curlshopt_Share, Curlshopt_unshare verwendet wird, detaillierte Erläuterung verwendet

M66 2025-06-03

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.

1. Grundkonzepte

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.

2. Code Beispiel: Shared Cookies

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";
?>

3. analysieren Sie den Code nach und nach

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.

4.. Dinge zu beachten

  • 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.