Php curl\u close():不是有效的curl句柄资源。。。但是为什么呢?
我正在创建一个PHP类,该类使用CURL处理一些流量,并且一切都运行得很好(除了cookies,但这是另一回事)。但有一件事没有那么好用,那就是curl_close()函数,我不知道为什么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)
$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
中发布您所拥有的类的代码。好的,我希望现在更清楚。