2012-03-09 15 views
6

Sto facendo una classe PHP che gestisce il traffico con l'uso di CURL e tutto funziona abbastanza bene (tranne che per i cookie ma hey è un'altra cosa). Una cosa che non funziona che grande è la funzione curl_close() e anche se non ho idea del perché ...curl_close(): non è una risorsa handle cURL valida ... ma PERCHE '?

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

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

ho chiamato in precedenza curl_exec() e tutto ha funzionato perfettamente. L'uscita questo mi sta dando è: risorse (6) di tipo (ricciolo)
Attenzione: curl_close(): 6 non è una risorsa valida handle cURL in filename.php on line

Qualcuno ha idea del perché questo sta accadendo? (il var_dump sta dicendo che è ovviamente una sessione di arricciatura).

AGGIUNTA:

A causa di problemi di copyright non riesco a postare l'intera classe TamperData atm (sarà GPL più tardi).

Ho semplificato a questo:

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

Il costruttore di TamperCurl è così:

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

nuovo la stessa uscita: risorsa (8) di tipo (arricciatura) PHP Attenzione: curl_close(): 8 non è una risorsa handle cURL valida in TamperCurl.php sulla riga 58

+2

Provare a rimuovere '' dal metodo di chiamata. – ThiefMaster

+0

@Briedis: non è un puntatore. E cosa succede con i punti interrogativi? Uno è abbastanza .. –

+1

Ok il puntatore potrebbe essere un po 'confuso, ma sta uscendo da una classe. Se non utilizzassi un riferimento, verrebbe semplicemente copiato nell'istruzione return della funzione get. Lasciando intatta la variabile di istanza effettiva dell'oggetto. (Almeno è quello che penso stia succedendo). Non importa se lo faccio con o senza un riferimento però. Anche questa funzione all'interno della classe non funziona per gli stessi motivi come sopra specificato: (! $ This-> curlSession = null) \t funzione pubblica __destruct() { \t \t \t se curl_close ($ this-> curlSession) ; \t} – shokora

risposta

7

Eventualmente il problema si è rivelato essere questo:

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

Se si è già chiuso il curlSession, la variabile che contiene la risorsa non è impostato su NULL, ma è impostato su 'tipo sconosciuto'. Quindi, questo risolve il problema:

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

io non so perché, ma questo anche risolto il mio problema con i biscotti, quindi potrebbe essere che se si tenta di chiudere una già chiuso ricciolo sessione qualcosa altro va storto.

Problemi correlati