curl_copy_handle
curl_copy_handle($ch)
Tworzy nowy uchwyt cURL z tymi samymi opcjami co podany (adres, nagłówki, limity czasu…). Późniejsze zmiany jednego uchwytu nie wpływają już na drugi. W razie błędu zwraca false.
Parametry
- $ch – uchwyt z curl_init().
Przykłady
$base = curl_init();
curl_setopt_array($base, array(
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 10,
CURLOPT_HTTPHEADER => array("Accept: application/json"),
));
// kopie dostają własny adres, baza pozostaje bez zmian
$rates = curl_copy_handle($base);
curl_setopt($rates, CURLOPT_URL, "http://127.0.0.1:1/kursy");
$weather = curl_copy_handle($base);
curl_setopt($weather, CURLOPT_URL, "http://127.0.0.1:1/pogoda");
echo curl_getinfo($rates, CURLINFO_EFFECTIVE_URL); // http://127.0.0.1:1/kursy
echo curl_getinfo($weather, CURLINFO_EFFECTIVE_URL); // http://127.0.0.1:1/pogoda
// adres w przykładzie jest nieosiągalny, żądanie kończy się błędem 7 (brak połączenia)
var_dump(curl_exec($rates)); // bool(false)
echo curl_errno($rates); // 7
Na co uważać
- Kopia przejmuje wszystkie opcje łącznie z adresem. Na kopii ustawiaj tylko to, co ma się różnić.
- PHP 7.4 zwraca zasób, PHP 8 obiekt CurlHandle. Test is_resource() w PHP 8 zawodzi, wynik sprawdzaj przez !== false.
- Do kilku kolejnych żądań do tego samego serwera wystarczy jeden uchwyt, cURL utrzymuje otwarte połączenie. Kopie przydają się, gdy żądania biegną równolegle (curl_multi_*).
Powiązane funkcje:
curl_init()
curl_setopt()
curl_setopt_array()
curl_reset()
curl_exec()