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

Tim*_*rst 6 php resources curl

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

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

var_dump($curlSession);
curl_close($curlSession);
die();
Run Code Online (Sandbox Code Playgroud)

我以前称为curl_exec(),一切都很完美.这给我的输出是:type(6)类型(curl)
警告:curl_close():6不是第58行的filename.php中的有效cURL句柄资源

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

加成:

由于版权问题,我不能发布整个TamperData类atm(稍后将是GPL).

我把它简化为:

$tamperCurl = new TamperCurl('test.xml');
echo var_dump($tamperCurl->getCURLSession());
curl_close($tamperCurl->getCURLSession());
die();
Run Code Online (Sandbox Code Playgroud)

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();
}
Run Code Online (Sandbox Code Playgroud)

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

Tim*_*rst 7

最终问题是这样的:

public function __destruct()
{
    if($this->curlSession != null) curl_close($this->curlSession);
}
Run Code Online (Sandbox Code Playgroud)

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

public function __destruct()
{
    if(gettype($this->curlSession) == 'resource') curl_close($this->curlSession);
}
Run Code Online (Sandbox Code Playgroud)

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