2012-03-09 15 views
6

CURLを使用してトラフィックを処理するPHPクラスを作成していますが、すべてがうまく動作します(ただし、クッキーを除いて、別のことです)。その偉大な動作しないことの一つは、しかしcurl_close()関数であり、私は完全に働いた理由は...curl_close():有効なcURLハンドルリソースではありませんが、なぜですか?

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

var_dump($curlSession); 
curl_close($curlSession); 
die(); 

I以前に呼び出さcurl_exec()、すべて見当がつかない。これは私を与えている出力は、次のとおりです。 リソース(6)タイプの(カール)
警告:curl_close():6行に filename.phpで有効なのcURLハンドルリソースではありません

これはなぜ起こっているのですか? (var_dumpは、明らかにカールセッションであると言っています)。ので、私は全体TamperDataクラスの気圧を投稿することができない著作権の問題(それは後でGPLになります)の

:ADDITION

Iはこれにそれを簡略化した:再び

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(); 
} 

同じ出力:タイプの リソース(8)(カール) PHP TamperCurlのコンストラクタは次のようである

$tamperCurl = new TamperCurl('test.xml'); 
echo var_dump($tamperCurl->getCURLSession()); 
curl_close($tamperCurl->getCURLSession()); 
die(); 

警告:curl_close():8は、行58のTamperCurl.phpの有効なcURLハンドルリソースではありません

+2

メソッド呼び出しから '&'を削除してみてください。 – ThiefMaster

+0

@Briedis - それはポインタではありません。疑問符はどうですか? 1つで十分です。 –

+1

ポインタが少し混乱するかもしれませんが、クラスから出てきています。参照を使用しない場合は、単にget関数のreturn文にコピーされます。オブジェクトの実際のインスタンス変数をそのままにしておきます。 (少なくとも私は起こっていると思います)。 私はそれを参照してもしなくてもかまいません。クラスの内部であっても、この関数は、上記の指定されたのと同じ理由のために動作しません: \tパブリック関数__destruct() \t { \t \t場合(!の$ this - > curlSession = NULL)curl_close(の$ this - > curlSession) ; \t} – shokora

答えて

7

最終的にこの問題は次のように判明しました:

curlSessionをすでに終了している場合、リソースを含む変数はNULLに設定されていませんが、 'unknown type'に設定されています。だから、これは問題が修正されています。

public function __destruct() 
{ 
    if(gettype($this->curlSession) == 'resource') curl_close($this->curlSession); 
} 

私がなぜわからないが、それはあなたがすでにカールセッションに他のがうまくいかない何かを閉じ閉じしようということであるかもしれないので、これはまた、クッキーと私の問題を修正しました。

関連する問題