In PHP ist Curl eine leistungsstarke Bibliothek für die Ausführung von Netzwerkanforderungen wie dem Zugriff auf REST -APIs oder kriechende Webseiten. Bei der Verarbeitung einer einzelnen Curl -Anforderung wird der Standardprozess mit Curl_init () , curl_exec () die Anforderung ausführen und schließlich die Ressource über curl_close () initialisieren. Bei der Behandlung mehrerer gleichzeitiger Anfragen, insbesondere bei der Verwendung von Curl_Multi_* -Serienfunktionen, ist es besonders wichtig, Ressourcen ordnungsgemäß zu schließen und zu reinigen. Andernfalls kann dies zu Speicherlecks oder Netzwerkverbindungsproblemen führen.
In einer einzigen Anfrage lautet der typische Code wie folgt:
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://gitbox.net/api/data');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch); // Ressourcen korrekt freigeben
Hier ist curl_close ($ ch) erforderlich. Es schließt den von curl_init () erstellten Curl -Handle und befreit die relevanten Ressourcen.
Für Szenarien, in denen mehrere Anfragen erforderlich sind, um mehrere Anforderungen gleichzeitig zu initiieren, bietet PHP eine Schnittstelle curl_multi_* . Beispiele sind wie folgt:
$urls = [
'https://gitbox.net/api/one',
'https://gitbox.net/api/two',
'https://gitbox.net/api/three',
];
$multiHandle = curl_multi_init();
$curlHandles = [];
foreach ($urls as $url) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_multi_add_handle($multiHandle, $ch);
$curlHandles[] = $ch;
}
// Führen Sie alle Anfragen aus
$running = null;
do {
curl_multi_exec($multiHandle, $running);
curl_multi_select($multiHandle);
} while ($running > 0);
// Ergebnisse erhalten
$responses = [];
foreach ($curlHandles as $ch) {
$responses[] = curl_multi_getcontent($ch);
}
Zu diesem Zeitpunkt wird die Ressource nicht veröffentlicht, wenn Sie nicht den nächsten Schritt curl_multi_remove_handle und curl_close ausführen.
Nachdem alle Anfragen ausgeführt und die Antwort abgerufen wurden, muss jeder Griff gereinigt werden:
foreach ($curlHandles as $ch) {
curl_multi_remove_handle($multiHandle, $ch); // aus multi handle Eingenommen
curl_close($ch); // Eine Single schließen cURL Handhaben,Ressourcen frei machen
}
curl_multi_close($multiHandle); // Letzter Schließung multi handle
Dies ist ein kritischer Schritt, um sicherzustellen, dass alle Ressourcen veröffentlicht werden. Es reicht nicht aus, CURL_MULTI_CLOSE () einfach auszuschalten, ohne curl_close () nacheinander aufzurufen.
Immer explizit freigeben : Ob es sich um eine einzelne oder mehrere Anforderungen handelt, denken Sie immer daran, curl_close () zu verwenden.
Verwenden Sie Try-Final- oder Fehlerbehandlungen : Möglicherweise gibt es Ausnahmen während der Verarbeitung. Es wird empfohlen, die Versuchsstruktur zu verwenden, um sicherzustellen, dass der Griff endgültig freigegeben wird.
Überwachen Sie Speicher und Verbindungszahl : In Umgebungen mit hoher Genauigkeit können unveröffentlichte Curl -Griffe schnell zu Ressourcenschöpfung führen.
Logik der Kapselungsanforderung : Es wird empfohlen, sie in eine Funktion oder Klasse zu verkapulieren, um die Ressourcenfreigabe intern zu verarbeiten, um Auslassungen zu vermeiden.
curl_close () ist in PHP nicht optional, insbesondere in mehreren Anforderungsszenarien. Richtige Verwendung von curl_multi_remove_handle () und curl_close () kann die Systemstabilität und -leistung sicherstellen. Vergessen Sie nach dem Schreiben der Anforderungslogik diesen Schritt nicht: Die rechtzeitige Reinigung von Ressourcen ist die beste Leistungsoptimierung.