curl_close (): не является допустимым ресурсом дескриптора cURL ... но ПОЧЕМУ? - PullRequest
6 голосов
/ 09 марта 2012

Я делаю класс PHP, который обрабатывает некоторый трафик с использованием CURL, и все работает довольно хорошо (за исключением файлов cookie, но, эй, это другое дело).Одна вещь, которая не очень хорошо работает, это функция curl_close (), и я понятия не имею, почему ...

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

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

Я ранее вызывал curl_exec (), и все работало отлично.Вывод, который это мне дает: ресурс (6) типа (curl) Предупреждение : curl_close (): 6 не является допустимым ресурсом дескриптора cURL в filename.php в строке 58

Кто-нибудь знает, почему это происходит?(var_dump говорит, что это, очевидно, сеанс curl).

ДОПОЛНЕНИЕ:

Из-за проблем с авторским правом я не могу опубликовать весь atm класса TamperData (позже будет 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();
}

Опять тот же вывод: resource (8) типа (curl)Предупреждение PHP: curl_close (): 8 не является допустимым ресурсом дескриптора cURL в TamperCurl.php в строке 58

1 Ответ

7 голосов
/ 11 марта 2012

В итоге проблема оказалась такова:

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

Я не уверен, почему, но это также устранило мою проблему с файлами cookie, поэтому может случиться так, что если вы попытаетесь закрыть уже закрытый сеанс скручивания что-то , иначе произойдет ошибка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...