Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php curl\u close():不是有效的curl句柄资源。。。但是为什么呢?_Php_Curl_Resources - Fatal编程技术网

Php curl\u close():不是有效的curl句柄资源。。。但是为什么呢?

Php curl\u close():不是有效的curl句柄资源。。。但是为什么呢?,php,curl,resources,Php,Curl,Resources,我正在创建一个PHP类,该类使用CURL处理一些流量,并且一切都运行得很好(除了cookies,但这是另一回事)。但有一件事没有那么好用,那就是curl_close()函数,我不知道为什么 $curlSession = &$tamperCurl->getCURLSession(); var_dump($curlSession); curl_close($curlSession); die(); 我以前调用过curl_exec(),一切都很顺利。这给我的输出是: 类型(curl)

我正在创建一个PHP类,该类使用CURL处理一些流量,并且一切都运行得很好(除了cookies,但这是另一回事)。但有一件事没有那么好用,那就是curl_close()函数,我不知道为什么

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

var_dump($curlSession);
curl_close($curlSession);
die();
我以前调用过curl_exec(),一切都很顺利。这给我的输出是: 类型(curl)的资源(6)
警告:curl_close():6不是中的有效curl句柄资源 第58行的filename.php

有人知道为什么会这样吗?(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不是第58行TampeCurl.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);
}

我不知道为什么,但这也解决了我在cookies方面的问题,因此,如果您试图关闭一个已经关闭的curl会话,可能会出现其他问题。

尝试从方法调用中删除
&
。@Briedis-它不是指针。问号是怎么回事?一个就够了。好的,指针可能有点混乱,但它来自一个类。如果我不使用引用,它将被复制到get函数的return语句中。保持对象的实际实例变量不变。(至少我认为这是正在发生的事情)。不过,不管我有没有推荐人,这都无关紧要。即使是类中的这个函数也无法工作,原因与上面指定的相同:公共函数uu destruct(){if($this->curlSession!=null)curl\u close($this->curlSession);}您是否确实尝试过删除
&
?请这样做,并添加第二个示例及其结果。我从未见过作为PHP变量引用传递句柄的代码。这就是为什么我建议你首先尝试,应该很快测试,这有助于澄清问题。此外,您需要在
tamperCurl
中发布您所拥有的类的代码。好的,我希望现在更清楚。