cURL 函数
在线手册:中文 英文
PHP手册

curl_copy_handle

(PHP 5)

curl_copy_handle复制一个cURL句柄和它的所有选项

说明

resource curl_copy_handle ( resource $ch )

复制一个cURL句柄并保持相同的选项。

参数

ch

curl_init() 返回的 cURL 句柄。

返回值

返回一个新的cURL句柄。

范例

Example #1 复制一个cURL句柄

<?php
// 创建一个新的cURL资源
$ch curl_init();

// 设置URL和相应的选项
curl_setopt($chCURLOPT_URL'http://www.example.com/');
curl_setopt($chCURLOPT_HEADER0);

// 复制句柄
$ch2 curl_copy_handle($ch);

// 抓取URL (http://www.example.com/) 并把它传递给浏览器
curl_exec($ch2);

// 关闭cURL资源,并且释放系统资源
curl_close($ch2);
curl_close($ch);
?>


cURL 函数
在线手册:中文 英文
PHP手册
PHP手册 - N: 复制一个cURL句柄和它的所有选项

用户评论:

aliihsancandemir at gmail dot com (29-Feb-2012 06:51)

san?r?m sadece bende olu?an bir sorun de?il, verilen ?rnekte bir hata sezdim

"curl_exec($ct2);"  "curl_exec($ch2);" olarak de?i?tirilmeli.
"curl_close($ct2);" "curl_close($ch2);" olarak de?i?tirilmeli.

<?php
// Yeni bir cURL ?zkayna?? olu?tural?m
$ct = curl_init();

// URL'yi ve ilgili se?enekleri belirtelim
curl_setopt($ct, CURLOPT_URL, 'http://www.siyanuraltes.com/');
curl_setopt($ct, CURLOPT_HEADER, 0);

// tan?t?c?y? kopyalayal?m
$ch2 = curl_copy_handle($ct);

// URL'yi taray?c?ya aktaral?m
curl_exec($ch2);

// cURL ?zkaynaklar?n? kapat?p sistem ?zkaynaklar?n? serbest b?rakal?m
curl_close($ch2);
curl_close($ct);
?>

ac221 at sussex dot ac dot uk (16-Jun-2008 11:00)

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);
            }
        }
    }

administrator at proxy-list dot org (22-Jan-2008 01:08)

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

nicolac76 at yahoo dot fr (03-Sep-2007 11:14)

Something work wrong if you use the var $i for a for...
$i cannot go over 127 (0111 1111b), more over you must say that the var is an int...

<?
$j=(int)0;
$curl = curl_init("http://www.example.com");

for($j=1;$j<=128;$j++) {
    $ch = curl_copy_handle($curl);
    curl_close($ch);
}
curl_close($curl);
?>

Andrew (20-May-2007 07:39)

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... */

?>