Signatur
Beschreibung
curl_reset() ermöglicht es, ein bestehendes cURL-Handle vollständig zurückzusetzen, sodass alle mit curl_setopt() oder curl_setopt_array() gesetzten Optionen gelöscht werden. Das Handle selbst bleibt gültig und kann anschließend mit neuen Optionen belegt werden.
Diese Funktion ist besonders nützlich, wenn ein cURL-Handle wiederverwendet werden soll – zum Beispiel in einer Schleife oder bei Klassen, die eine persistente Verbindung verwalten – ohne das Handle schließen und neu anlegen zu müssen. Das spart den Overhead eines erneuten curl_init()-Aufrufs.
Nach dem Aufruf von curl_reset() verhält sich das Handle exakt so, als wäre es frisch mit curl_init() ohne URL-Parameter erzeugt worden: Es besitzt keinerlei gesetzte Optionen, keine URL, keine Header und keine Callback-Funktionen mehr.
- Nützlich bei der Wiederverwendung von Handles in Pools oder Loops.
- Verhindert ungewolltes Übernehmen von Optionen aus vorherigen Requests.
- Geringerer Ressourcenaufwand als
curl_close()+curl_init().
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $handle Pflicht | CurlHandle | Ein gültiges cURL-Handle, das zuvor mit curl_init() erzeugt wurde. Nach dem Zurücksetzen sind alle Optionen dieses Handles gelöscht. |
Rückgabewert
Beispiele
Handle nach einem Request zurücksetzen und wiederverwenden
<?php
$ch = curl_init();
// Erster Request
curl_setopt($ch, CURLOPT_URL, 'https://example.com/api/resource1');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['X-Custom-Header: Wert']);
$result1 = curl_exec($ch);
echo "Erster Response: " . strlen($result1) . " Bytes\n";
// Handle vollständig zurücksetzen – alle Optionen sind jetzt gelöscht
curl_reset($ch);
// Zweiter Request mit völlig neuen Optionen
curl_setopt($ch, CURLOPT_URL, 'https://example.com/api/resource2');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result2 = curl_exec($ch);
echo "Zweiter Response: " . strlen($result2) . " Bytes\n";
curl_close($ch);
Mehrere URLs mit einem einzigen Handle in einer Schleife abrufen
<?php
$urls = [
'https://httpbin.org/get?id=1',
'https://httpbin.org/get?id=2',
'https://httpbin.org/get?id=3',
];
$ch = curl_init();
foreach ($urls as $url) {
// Handle vor jedem Durchlauf zurücksetzen
curl_reset($ch);
curl_setopt_array($ch, [
CURLOPT_URL => $url,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 10,
]);
$response = curl_exec($ch);
if ($response === false) {
echo "Fehler bei {$url}: " . curl_error($ch) . "\n";
} else {
echo "URL {$url} lieferte " . strlen($response) . " Bytes\n";
}
}
curl_close($ch);
// Wichtig · Fallstricke
Achtung: Nach curl_reset() sind alle Optionen zurückgesetzt, also auch CURLOPT_RETURNTRANSFER, CURLOPT_TIMEOUT, gespeicherte Cookies und benutzerdefinierte Header. Es müssen alle benötigten Optionen für den nächsten Request neu gesetzt werden.
Die Funktion darf nicht mit einem bereits geschlossenen Handle (nach curl_close()) verwendet werden – das führt zu einem Fehler. Stets sicherstellen, dass das Handle noch offen ist.
In PHP 8.0 wurde der Parametertyp von resource auf CurlHandle umgestellt. Code, der das Handle als generische Resource behandelt, sollte entsprechend angepasst werden.