©
                    本文档使用
                    php中文网手册 发布
                
(PHP 5, PHP 7)
curl_copy_handle — 复制一个cURL句柄和它的所有选项
$ch 
   )复制一个cURL句柄并保持相同的选项。
ch 由 curl_init() 返回的 cURL 句柄。
返回一个新的cURL句柄。
Example #1 复制一个cURL句柄
  <?php
 // 创建一个新的cURL资源
 $ch  =  curl_init ();
 // 设置URL和相应的选项
 curl_setopt ( $ch ,  CURLOPT_URL ,  'http://www.example.com/' );
 curl_setopt ( $ch ,  CURLOPT_HEADER ,  0 );
 // 复制句柄
 $ch2  =  curl_copy_handle ( $ch );
 // 抓取URL (http://www.example.com/) 并把它传递给浏览器
 curl_exec ( $ch2 );
 // 关闭cURL资源,并且释放系统资源
 curl_close ( $ch2 );
 curl_close ( $ch );
 ?>   [#1] ac221 at sussex dot ac dot uk [2008-06-16 03:00:46]
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);
			}
		}
	}
[#2] administrator at proxy-list dot org [2008-01-22 05:08:14]
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
[#3] Andrew [2007-05-19 23:39:12]
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');
?>