Start · Sprachen · PHP · Referenz · curl_reset

curl_reset

Funktion

Setzt alle zuvor gesetzten Optionen eines libcurl-Session-Handles auf ihre Standardwerte zurück, ohne die Session selbst zu schließen.

seit PHP 5.5.0 Kategorie: http

Signatur

curl_reset(CurlHandle $handle): void

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

Typ
void
Beschreibung
Die Funktion gibt keinen Wert zurück.

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);
Erster Response: 1234 Bytes Zweiter Response: 5678 Bytes

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);
URL https://httpbin.org/get?id=1 lieferte 312 Bytes URL https://httpbin.org/get?id=2 lieferte 312 Bytes URL https://httpbin.org/get?id=3 lieferte 312 Bytes

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