Signatur
Beschreibung
curl_share_close() schließt einen zuvor mit curl_share_init() erzeugten cURL-Share-Handle und gibt den belegten Arbeitsspeicher sowie alle internen Ressourcen frei. Der Share-Handle wird danach ungültig und darf nicht weiter verwendet werden.
Share-Handles ermöglichen es, bestimmte Daten – wie DNS-Cache, SSL-Session-Daten oder HTTP-Cookies – zwischen mehreren cURL-Handles zu teilen. Wenn alle cURL-Handles, die den Share-Handle verwenden, geschlossen wurden, sollte auch der Share-Handle selbst mit curl_share_close() geschlossen werden, um Speicherlecks zu vermeiden.
Ab PHP 8.0 arbeitet curl_share_close() mit dem dedizierten Typ CurlShareHandle anstelle einer generischen resource. Die Garbage Collection in PHP kann den Handle zwar automatisch freigeben, es gilt jedoch als gute Praxis, ihn explizit zu schließen, sobald er nicht mehr benötigt wird.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $share_handle Pflicht | CurlShareHandle | Ein gültiger cURL-Share-Handle, der zuvor mit curl_share_init() erstellt wurde. |
Rückgabewert
Beispiele
DNS-Cache zwischen zwei cURL-Requests teilen und Handle schließen
<?php
// Share-Handle erstellen
$sh = curl_share_init();
// DNS-Cache zwischen Handles teilen
curl_share_setopt($sh, CURLSHOPT_SHARE, CURL_LOCK_DATA_DNS);
// Ersten cURL-Handle erstellen und mit Share verknüpfen
$ch1 = curl_init('https://www.example.com/');
curl_setopt($ch1, CURLOPT_SHARE, $sh);
curl_setopt($ch1, CURLOPT_RETURNTRANSFER, true);
// Zweiten cURL-Handle erstellen und mit Share verknüpfen
$ch2 = curl_init('https://www.example.com/page2');
curl_setopt($ch2, CURLOPT_SHARE, $sh);
curl_setopt($ch2, CURLOPT_RETURNTRANSFER, true);
// Requests ausführen
$result1 = curl_exec($ch1);
$result2 = curl_exec($ch2);
// Zuerst die einzelnen cURL-Handles schließen
curl_close($ch1);
curl_close($ch2);
// Danach den Share-Handle schließen
curl_share_close($sh);
echo "Beide Requests abgeschlossen.\n";
SSL-Session-Daten teilen und Ressourcen korrekt freigeben
<?php
$sh = curl_share_init();
// SSL-Sessions und Cookies teilen
curl_share_setopt($sh, CURLSHOPT_SHARE, CURL_LOCK_DATA_SSL_SESSION);
curl_share_setopt($sh, CURLSHOPT_SHARE, CURL_LOCK_DATA_COOKIE);
$urls = [
'https://api.example.com/endpoint1',
'https://api.example.com/endpoint2',
'https://api.example.com/endpoint3',
];
$handles = [];
foreach ($urls as $url) {
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_SHARE, $sh);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
$handles[] = $ch;
}
// Alle Requests einzeln ausführen
foreach ($handles as $ch) {
$response = curl_exec($ch);
if ($response === false) {
echo 'Fehler: ' . curl_error($ch) . "\n";
}
curl_close($ch);
}
// Share-Handle nach allen Requests freigeben
curl_share_close($sh);
echo "Alle Ressourcen freigegeben.\n";
// Wichtig · Fallstricke
Reihenfolge beachten: Der Share-Handle darf erst geschlossen werden, nachdem alle cURL-Handles, die ihn verwenden, bereits mit curl_close() geschlossen wurden. Ein Versuch, curl_share_close() aufzurufen, solange noch aktive cURL-Handles auf den Share zugreifen, kann zu undefiniertem Verhalten oder Fehlern führen.
PHP 8.0+: Ab PHP 8.0 wurde der interne Typ von resource auf CurlShareHandle umgestellt. Code, der is_resource() zur Prüfung verwendet, muss entsprechend angepasst werden.