我正在创建一个使用CURL处理一些流量的PHP类,一切都运行得很好(除了cookie,但嘿,这是另一回事)。有一点不太好用的是curl_close()函数,但我不知道为什么......
$curlSession = &$tamperCurl->getCURLSession();
var_dump($curlSession);
curl_close($curlSession);
die();
我以前称为curl_exec(),一切都很完美。这给我的输出是:
资源(6)类型(卷曲)
警告:curl_close():6不是有效的cURL句柄资源
第 58
有人知道为什么会这样吗? (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句柄资源
答案 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);
}
我不确定为什么,但这也解决了我的问题,所以如果你试图关闭一个已经关闭的卷曲会话某些东西其他错误。