2012-03-09 18 views
6

मैं एक PHP कक्षा बना रहा हूं जो कुछ ट्रैफिक को कर्ल के उपयोग से संभालता है और सबकुछ अच्छी तरह से काम करता है (कुकीज़ को छोड़कर, लेकिन हे एक और बात है)। एक बात है कि उस महान काम नहीं करता है curl_close() फ़ंक्शन हालांकि है और मुझे नहीं पता किcurl_close(): वैध कर्ल हैंडल संसाधन नहीं है ... लेकिन क्यों?

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

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

मैं curl_exec पुराना नाम() क्यों ... और सब कुछ पूरी तरह से काम किया है। उत्पादन यह मेरे दे रहा है है: संसाधन (6) प्रकार के (curl)
चेतावनी: curl_close(): 6 लाइन पर filename.php में एक वैध cURL संभाल संसाधन नहीं है

क्या किसी को पता है कि यह क्यों हो रहा है? (var_dump कह रहा है कि यह स्पष्ट रूप से एक कर्ल सत्र है)।

अलावा:

क्योंकि कॉपीराइट समस्याओं की मैं पूरी TamperData वर्ग एटीएम पोस्ट नहीं कर सकते हैं (यह जीपीएल बाद में हो जाएगा)।

मैं इसे इस के लिए सरल है:

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

फिर एक ही आउटपुट: संसाधन (8) प्रकार के (कर्ल) पीएचपी चेतावनी: curl_close(): 8 लाइन 58

+2

विधि कॉल से '&' को हटाने का प्रयास करें। – ThiefMaster

+0

@Briedis - यह एक सूचक नहीं है। और प्रश्न चिह्नों के साथ क्या हो रहा है? एक पर्याप्त है .. –

+1

ठीक है सूचक थोड़ा उलझन में हो सकता है, लेकिन यह एक वर्ग से बाहर आ रहा है। अगर मैं किसी संदर्भ का उपयोग नहीं करता तो इसे केवल फ़ंक्शन के रिटर्न स्टेटमेंट में कॉपी किया जाएगा। ऑब्जेक्ट के वास्तविक आवृत्ति चर को छोड़कर छोड़ दिया गया। (कम से कम यही मुझे लगता है कि हो रहा है)। इससे कोई फर्क नहीं पड़ता कि मैं इसे संदर्भ के साथ या बिना करता हूं। यहां तक ​​कि वर्ग के भीतर इस समारोह के रूप में ऊपर निर्दिष्ट एक ही कारण के लिए काम नहीं करता है: (! $ This-> curlSession = नल) \t सार्वजनिक समारोह __destruct() \t { \t \t अगर curl_close ($ this-> curlSession) ; \t} – shokora

उत्तर

7

पर TamperCurl.php में मान्य कर्ल हैंडल संसाधन नहीं है, अंततः समस्या यह साबित हुई:

public function __destruct() 
{ 
    if($this->curlSession != null) curl_close($this->curlSession); 
} 

आप पहले से ही curlSession बंद कर दिया है, तो संसाधन युक्त चर शून्य पर सेट नहीं है, लेकिन यह अज्ञात प्रकार 'पर सेट है। तो इससे समस्या हल हो:

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

मुझे यकीन है कि नहीं कर रहा हूँ क्यों, लेकिन यह भी कुकीज़ के साथ मेरी समस्या ठीक हो गई है, तो यह हो सकता है कि यदि आप बंद करने की कोशिश एक पहले से ही कर्ल सत्र बंद कर दिया कुछ किसी और गलत हो जाता है।

संबंधित मुद्दे