php - curl_close() : is not a valid cURL handle resource . .. 但为什么呢?

标签 php curl resources

我正在制作一个 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/

相关文章:

javascript - 将 json 从 php 解析为 javascript

javascript - 如何根据先前多行列表的选择动态加载下拉列表

json - 带有 JSON 结果的 Bing 搜索 HTTP 请求示例?

php - 我如何检查代理是否处于事件状态

java - 到底什么是资源泄漏?

php - 如何解决 Laravel 中的数据更新错误

php - 不正确的整数值 SQL 错误

php - 如何解决 Laravel 安装上 MAC OS 上的 curl 证书问题?

java - 在 IntelliJ 中从类路径外部的 JAR 加载资源文件

localization - Vala、资源和本地化