In der modernen Webentwicklung war die Leistungsoptimierung schon immer ein wichtiges Thema. Insbesondere wenn mehrere HTTP -Anfragen eingeleitet werden müssen, wirkt sich die effiziente Verwaltung direkt auf die Reaktionsgeschwindigkeit des Programms und die Effizienz von Serverressourcen aus. PHP bietet eine Curl -Erweiterung, wobei die Funktionen curl_multi_* Entwicklern dabei helfen können, mehrere Anforderungen gleichzeitig zu bearbeiten und die Ausführungseffizienz erheblich zu verbessern.
Erfahren wir mehr über die Verwendung von curl_multi_close und kombinieren Sie sie mit tatsächlichen Beispielen, um zu erklären, wie Sie gleichzeitige HTTP -Anforderungen korrekt verwalten können.
In PHP ist CURL_MULTI_CLOSE () eine Funktion zum Schließen eines Curl -Multi -Griffs . Wenn wir mit Curl_Multi_init () einen Multi -Handle erstellen und mehrere separate Curl -Handles für die gleichzeitige Verarbeitung über curl_multi_add_handle () hinzufügen, müssen wir schließlich curl_multi_close () aufrufen, um Ressourcen freizugeben, um Speicherlecks zu verhindern.
Der übliche vollständige Prozess der gleichzeitigen Anfragen ist wie folgt:
Multi -Griff initialisieren.
Erstellen Sie mehrere Curl Easy -Handles und stellen Sie die entsprechende URL und Optionen ein.
Fügen Sie ein einfaches Griff zum Multi -Griff hinzu.
Multi -Griff ausführen.
Entfernen und schließen Sie jeden einfachen Griff.
Schließlich schließen Sie den Multi -Griff (mit curl_multi_close () ).
Hier ist ein vollständiges Beispiel, das zeigt, wie man ordnungsgemäß curl_multi_close () verwendet, um gleichzeitige HTTP -Anforderungen zu verwalten:
<?php
// Angefordert werden URL Liste
$urls = [
'https://gitbox.net/api/data1',
'https://gitbox.net/api/data2',
'https://gitbox.net/api/data3',
];
// Initialisierung multi handle
$multiHandle = curl_multi_init();
$curlHandles = [];
// Initialisierung每个 cURL easy handle,und hinzufügen zu multi handle
foreach ($urls as $i => $url) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_multi_add_handle($multiHandle, $ch);
$curlHandles[$i] = $ch;
}
// implementieren multi handle
$running = null;
do {
$status = curl_multi_exec($multiHandle, $running);
if ($running) {
// Warten auf eine aktive Verbindung
curl_multi_select($multiHandle);
}
} while ($running > 0);
// Die Verarbeitung gibt Ergebnisse zurück
foreach ($curlHandles as $ch) {
$content = curl_multi_getcontent($ch);
$info = curl_getinfo($ch);
echo "fragen URL: " . $info['url'] . PHP_EOL;
echo "HTTP Statuscode: " . $info['http_code'] . PHP_EOL;
echo "Zurück zu Inhalt zurückkehren: " . substr($content, 0, 100) . "..." . PHP_EOL;
echo str_repeat("-", 50) . PHP_EOL;
// Entfernen und schließen easy handle
curl_multi_remove_handle($multiHandle, $ch);
curl_close($ch);
}
// Schließung multi handle
curl_multi_close($multiHandle);
?>
Rufen Sie unbedingt curl_multi_close () auf, nachdem alle einfachen Griffe entfernt wurden.
Wenn Sie vergessen, curl_multi_close () aufzurufen, kann die Ressource am Ende des Skripts automatisch von PHP freigegeben werden. Dies ist jedoch keine gute Gewohnheit, insbesondere in langfristigen Laufen oder mit hoher Konzern, was zu Leckagen führt.
curl_multi_close () schließt den hinzugefügten einfachen Griff nicht automatisch. Vor dem Schließen des Multi -Griffs muss jeder einfache Griff manuell entfernt und geschlossen werden.
Durch die ordnungsgemäße Verwendung von curl_multi_close () ist es möglich, sicherzustellen, dass die gleichzeitige HTTP -Anforderungsverwaltung sowohl effizient als auch sicher ist. Denken Sie daran, dass alle Anfragen mit curl_multi bearbeitet wurden, sollten Sie alle Ressourcen für die Handlungen bereinigen, um Ihr Programm robust und Leistung zu halten.