我正在制作一个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会话,可能会出现其他问题。