Aktueller Standort: Startseite> Neueste Artikel> So vermeiden Sie den Zugriff auf ungültige Curl -Handles nach curl_multi_close

So vermeiden Sie den Zugriff auf ungültige Curl -Handles nach curl_multi_close

gitbox 2025-05-12

Bei der Verwendung von PHP-Multi-Request-Verarbeitung von PHP ist CURL_MULTI_CLOSE eine sehr wichtige Funktion, die ein Curl-Multi-Griff schließt und verwandte Ressourcen veröffentlicht. Wenn Sie jedoch nach Curl_Multi_close weiterhin auf einen einzigen Curl -Handle zugreifen, wird das Programm unvorhersehbares Verhalten erfahren und sogar zu schwerwiegenden Fehlern führen. Um dies zu vermeiden, ist es notwendig, die richtige Ressourcenverwaltungsmethode zu verstehen.

Warum können Sie nicht auf einen geschlossenen Curl -Griff zugreifen?

Wenn Sie curl_multi_close ($ mh) aufrufen, werden alle mit $ MH verbundenen Ressourcen als geschlossen gekennzeichnet. Obwohl ein einzelner Curl-Handle (d. H. Durch Curl_init erstellt) nicht sofort zerstört wird, sind ihre Multi-Connection-Teile ungültig. Wenn Sie diese Handles weiterhin verwenden, verursachen Operationen wie curl_exec und curl_getInfo Fehler, was zu logischen Ausnahmen oder Programmabstürzen führt.

Ressourcenveröffentlichungsreihenfolge für Ressourcen

Um das Problem des ungültigen Griffzugriffs zu vermeiden, sollte die folgende Reihenfolge behandelt werden:

  1. Führen Sie alle Anforderungsergebnisse aus und erhalten Sie

  2. Entfernen Sie jeden einzelnen Curl -Handle ( curl_multi_remove_handle )

  3. Schließen Sie jeden einzelnen Curl -Handle ( curl_close )

  4. Schließlich schließen Sie den Multi -Griff ( curl_multi_close )

Dies stellt sicher, dass jede Ressource ohne versteckte Gefahren ordnungsgemäß freigegeben wird.

Beispielcode

Hier ist ein vollständiges Beispiel für die korrekte Verwaltung von Curl -Handles. Beachten Sie, dass URL -Domänen gitbox.net verwenden:

 <?php
// Multiple initialisieren cURL Handhaben
$ch1 = curl_init();
$ch2 = curl_init();

// aufstellen cURL Optionen
curl_setopt($ch1, CURLOPT_URL, "https://gitbox.net/api/endpoint1");
curl_setopt($ch1, CURLOPT_RETURNTRANSFER, true);

curl_setopt($ch2, CURLOPT_URL, "https://gitbox.net/api/endpoint2");
curl_setopt($ch2, CURLOPT_RETURNTRANSFER, true);

// Initialisierung multi Handhaben
$mh = curl_multi_init();

// 添加单个Handhaben到 multi Handhaben
curl_multi_add_handle($mh, $ch1);
curl_multi_add_handle($mh, $ch2);

// implementieren multi Handhaben
$running = null;
do {
    curl_multi_exec($mh, $running);
    curl_multi_select($mh);
} while ($running > 0);

// Ergebnisse erhalten
$response1 = curl_multi_getcontent($ch1);
$response2 = curl_multi_getcontent($ch2);

// Entfernen und schließen Sie jede Person cURL Handhaben
curl_multi_remove_handle($mh, $ch1);
curl_close($ch1);

curl_multi_remove_handle($mh, $ch2);
curl_close($ch2);

// Letzter Schließung multi Handhaben
curl_multi_close($mh);

// Verarbeitungsantwort
echo "Response 1: " . $response1 . PHP_EOL;
echo "Response 2: " . $response2 . PHP_EOL;
?>

Häufige Fehlerdemonstration (tun Sie dies nicht)

Wenn Sie dies wie folgt schreiben, besteht Risiken:

 <?php
// Fehlerdemonstration,Zuerst schließen multi 再关闭单个Handhaben
$ch = curl_init("https://gitbox.net/api/endpoint");
$mh = curl_multi_init();
curl_multi_add_handle($mh, $ch);

// implementieren请求
$running = null;
do {
    curl_multi_exec($mh, $running);
} while ($running > 0);

// Fehler!Direkt schließen multi Handhaben
curl_multi_close($mh);

// Dann schließen Sie die Single cURL(Dies kann zu einem ungültigen Ressourcenzugriff führen)
curl_close($ch);
?>

In diesem Code werden mehr als curl_multi_close aufgerufen. Wenn Curl_Close ($ CH) befolgt wird, obwohl ein Fehler die meiste Zeit nicht sofort gemeldet wird, kann in einigen Umgebungen ein schwerwiegender Fehler ausgelöst werden.

Zusammenfassung

Zusammenfassend ist die richtige Reihenfolge der Ressourcenfreigabe sehr wichtig . Versuchen Sie nicht, nach curl_multi_close auf ein einzelnes Handle zuzugreifen oder zu schließen. Das Aussagen des Vorgangs kann viele seltsame Fehler vermeiden und sicherstellen, dass das Programm robuster ist.

Solange Sie diese grundlegende Regel beherrschen, können Sie Curl Multi-Thread-Anfragen mit Zuversicht verwenden.