curl_close():不是有效的cURL句柄资源......但是为什么?

时间:2012-03-09 11:43:27

标签: php curl resources

我正在创建一个使用CURL处理一些流量的PHP类,一切都运行得很好(除了cookie,但嘿,这是另一回事)。有一点不太好用的是curl_close()函数,但我不知道为什么......

$curlSession = &$tamperCurl->getCURLSession();

var_dump($curlSession);
curl_close($curlSession);
die();

我以前称为curl_exec(),一切都很完美。这给我的输出是:     资源(6)类型(卷曲)     
    警告:curl_close():6不是有效的cURL句柄资源     第 58

filename.php

有人知道为什么会这样吗? (var_dump说它显然是一个卷曲会话。)

此外:

由于版权问题,我无法发布整个TamperData类atm(以后会是GPL)。

我已将其简化为:

$tamperCurl = new TamperCurl('test.xml');
echo var_dump($tamperCurl->getCURLSession());
curl_close($tamperCurl->getCURLSession());
die();

TamperCurl的构造函数是这样的:

public function __construct($xmlFilePath, $options=null)    
{
    if($options != null) $this->setOptions($options);

    $this->headerCounter = 0;
    $this->setXMLHeader($xmlFilePath);
    $this->init();
}

public function init($reuseConnection=false,$resetSettings=null)
{
    $this->curlSession = curl_init();
}

同样的输出:     资源(8)类型(卷曲)     PHP警告:curl_close():8在第58行的TamperCurl.php中不是有效的cURL句柄资源

1 个答案:

答案 0 :(得分:7)

最终问题出现了:

public function __destruct()
{
    if($this->curlSession != null) curl_close($this->curlSession);
}

如果您已经关闭了curlSession,则包含该资源的变量不会设置为NULL,但会将其设置为“unknown type”。所以这解决了这个问题:

public function __destruct()
{
    if(gettype($this->curlSession) == 'resource') curl_close($this->curlSession);
}

我不确定为什么,但这也解决了我的问题,所以如果你试图关闭一个已经关闭的卷曲会话某些东西其他错误。