(PHP 5, PHP 7, PHP 8)
curl_multi_exec — Führt die Unter-Verbindungen des cURL-Handles aus
Verarbeitet alle Handles; diese Methode kann unabhängig davon aufgerufen werden, ob eines der Handles Daten lesen oder schreiben muß.
multi_handle
Ein von curl_multi_init() zurückgegebenes cURL-Multihandle.
still_running
Eine Referenz auf ein Flag um festzustellen, ob auf einem oder mehreren Handles noch gearbeitet wird.
Ein cURL-Code der in den cURL Vordefinierten Konstanten definiert ist.
Hinweis:
Es werden nur Fehler zurückgegeben, die den Handle-Stack betreffen. Auch wenn
CURLM_OK
zurückgegeben wird können auf einzelnen Handles Fehler aufgetreten sein.
Version | Beschreibung |
---|---|
8.0.0 |
multi_handle erwartet nun eine
CurlMultiHandle-Instanz; vorher wurde eine
Ressource erwartet.
|
Beispiel #1 curl_multi_exec()-Beispiel
In diesem Beispiel werden cURL-Handles für eine Liste von URLs erstellt, einem Mehrfach-Handle hinzugefügt und anschließend asynchron ausgeführt.
<?php
$urls = [
"https://www.php.net/",
"https://www.example.com/",
];
$mh = curl_multi_init();
$map = new WeakMap();
foreach ($urls as $url) {
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_multi_add_handle($mh, $ch);
$map[$ch] = $url;
}
do {
$status = curl_multi_exec($mh, $unfinishedHandles);
if ($status !== CURLM_OK) {
throw new \Exception(curl_multi_strerror(curl_multi_errno($mh)));
}
while (($info = curl_multi_info_read($mh)) !== false) {
if ($info['msg'] === CURLMSG_DONE) {
$handle = $info['handle'];
curl_multi_remove_handle($mh, $handle);
$url = $map[$handle];
if ($info['result'] === CURLE_OK) {
$statusCode = curl_getinfo($handle, CURLINFO_HTTP_CODE);
echo "Anfrage an {$url} beendet mit dem HTTP-Status {$statusCode}:", PHP_EOL;
echo curl_multi_getcontent($handle);
echo PHP_EOL, PHP_EOL;
} else {
echo "Anfrage an {$url} fehlgeschlagen mit dem Fehler: ", PHP_EOL;
echo curl_strerror($info['result']);
echo PHP_EOL, PHP_EOL;
}
}
}
if ($unfinishedHandles) {
if (($updatedHandles = curl_multi_select($mh)) === -1) {
throw new \Exception(curl_multi_strerror(curl_multi_errno($mh)));
}
}
} while ($unfinishedHandles);
curl_multi_close($mh);
?>