我正在制作一个 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 session )。
补充:
由于版权问题,我无法将整个 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();
}
同样的输出: 类型 (curl) 的资源 (8) PHP 警告:curl_close():8 不是第 58 行 TamperCurl.php 中的有效 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 session ,可能会发生其他事情,否则会出错。
关于php - curl_close() : is not a valid cURL handle resource . .. 但为什么呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9633496/