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


curl_close(): is not a valid cURL handle resource ... but WHY?

我正在制作一个PHP类,它使用CURL处理一些流量,一切都很好(除了cookie,但嘿,那是另一回事)。有一件事没有那么好用,那就是curl_close()函数,我不知道为什么。。。

$curlSession = &$tamperCurl->getCURLSession();
var_dump($curlSession);
curl_close($curlSession);
die();

我以前调用过curl_exec(),一切都很顺利。这给我的输出是:类型(curl)的资源(6)
警告:curl_close():6不是中的有效curl句柄资源filename.php第58行

有人知道为什么会发生这种事吗?(var_dump说这显然是一个curl会话)。

添加:

由于版权问题,我无法发布整个坦帕数据类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();
}

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

最终问题是:

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

如果已关闭curlSession,则包含资源的变量不会设置为NULL,而是设置为"未知类型"。因此,这解决了问题:

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

我不知道为什么,但这也解决了我的cookie问题,所以如果你试图关闭一个已经关闭的curl会话,可能会出现其他问题