curl_copy_handle

(PHP 5, PHP 7, PHP 8)

curl_copy_handleKopiert ein cURL-Handle inklusive aller Voreinstellungen

Beschreibung

curl_copy_handle(CurlHandle $handle): CurlHandle|false

Diese Funktion kopiert ein cURL-Handle und gibt ein neues Handle mit den gleichen Voreinstellungen zurück.

Parameter-Liste

handle

Ein von curl_init() zurückgegebenes cURL-Handle.

Rückgabewerte

Gibt ein neues cURL-Handle zurück. Bei einem Fehler wird false zurückgegeben.

Changelog

Version Beschreibung
8.0.0 handle erwartet nun eine CurlHandle-Instanz; vorher wurde eine Ressource erwartet.
8.0.0 Bei Erfolg gibt diese Funktion nun eine CurlHandle-Instanz zurück; vorher wurde eine Ressource zurückgegeben.

Beispiele

Beispiel #1 cURL-Handle kopieren

<?php
// erzeuge ein neues cURL-Handle
$ch = curl_init();

// setze die URL und andere Optionen
curl_setopt($ch, CURLOPT_URL, 'http://www.example.com/');
curl_setopt($ch, CURLOPT_HEADER, 0);

// das Handle kopieren
$ch2 = curl_copy_handle($ch);

// URL auslesen und im Browser ausgeben
curl_exec($ch2);

// schließe die cURL-Handles
curl_close($ch2);
curl_close($ch);
?>

add a note add a note

User Contributed Notes 3 notes

up
5
administrator at proxy-list dot org
16 years ago
There is some internal curl error (CURLE_FAILED_INIT) when you are trying to use just copied curl handle in curl_multi_add_handle(). I have checked the same problematic PHP code but with little difference: instead of creating curl’s copy I have used the original one (template). As I expect code works without any error. I think curl_multi_* along with curl_copy_handle() is still raw and needs some improvements.

With best wishes

Vitali Simsive
up
-4
Andrew
17 years ago
You can use it for some kind of templates:

<?php
$ch
= array();
$ch[0] = curl_init();
curl_setopt($ch[0], CURLOPT_URL, 'http://beengo.net/');
curl_setopt($ch[0], CURLOPT_HEADER, 0);
curl_setopt($ch[0], CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch[0], CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch[0], CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);

$ch[1] = curl_copy_handle($ch[0]);
curl_setopt($ch[1], CURLOPT_URL, 'http://beengo.net/cells/list');

$ch[2] = curl_copy_handle($ch[0]);
curl_setopt($ch[2], CURLOPT_URL, 'http://beengo.net/cells/list?q=travel');

/* And so on, when you need to get number of pages with same parameters... */

?>
up
-15
ac221 at sussex dot ac dot uk
16 years ago
Hmm I don't have a problem with this, using PHP 5.2.5 libcurl 7.16.3 maybe it's been fixed ...

I am m having trouble getting curl_copy_handle to copy all the curlopts across though...

    protected function curlMultiPrime(array $reqArr){
        // Store the request array so we can reinitialise the multi handle
        $this->reqArr = $reqArr;
        // Close existing curl uni handles
        $this->closeMultiCurlUniHandles();
        foreach($reqArr as $curlConf){
            if(!($curlConf instanceof curlConfRequest ))
                throw new curlConfException('All objects passed to configure requests must be instances of curlConfRequest.',curlConfException::CURL_INVALID_CONF_OBJ);
            if(!$cch = curl_copy_handle($this->curlHandle)){
                throw new curlException('Failed to clone template curl handle.',$this->curlHandle);
            }else{
                curl_setopt_array($cch,$curlConf->getCurlOpts());
            }
            if(curl_multi_add_handle($this->curlMultiHandle,$cch) === 0){
                $this->curlUniHandleRef[] = $cch;
            }else{
                throw new curlException('Failed to add curl handle to multi stack.',$cch);
            }
        }
    }
To Top