Как повторно использовать контекст cUrl после выполнения запроса PUT в PHP? - PullRequest
4 голосов
/ 27 марта 2012

У меня есть некоторый код, в котором я пытаюсь повторно использовать контекст curl для выполнения запросов на ввод и получение запросов. После каждого запроса на поставку запрос get завершается с таким предупреждением PHP:

curl_exec (): ресурс CURLOPT_INFILE исчез, сбрасывается на значение по умолчанию

Я мог бы использовать PHP-оператор закрытия, но я бы предпочел правильно сбросить контекст curl. Кто-нибудь знает как это сделать? Я также мог бы использовать различные контексты curl, но я бы предпочел повторно использовать соединение, так как приложение отправляет много запросов. Я мог бы оставить дескриптор файла открытым, но это похоже на хакерское решение, тем более что все это заключено в функции, поэтому я могу вызывать doPut , doGet и т. Д.

$curlContext = curl_init();
$fh = fopen('someFile.txt', 'rw');
curl_setopt($curlContext, CURLOPT_URL, $someUrl);
curl_setopt($curlContext, CURLOPT_PUT, TRUE);
curl_setopt($curlContext, CURLOPT_INFILE, $fh);
curl_setopt($curlContext, CURLOPT_INFILESIZE, $size);
$curl_response1 = curl_exec($curlContext);
fclose($fh);
curl_setopt($curlContext, CURLOPT_PUT, FALSE);
curl_setopt($curlContext, CURLOPT_HTTPGET, TRUE);
curl_setopt($curlContext, CURLOPT_URL, $someOtherUrl);
$curl_response1 = curl_exec($curlContext);

Спасибо.

Ответы [ 3 ]

2 голосов
/ 02 апреля 2013

После fclose ($ fh) выполните curl_setopt ($ curlContext, CURLOPT_INFILE, STDIN);

Избегает предупреждения «ресурс CURLOPT_INFILE исчез, сбрасывается на значение по умолчанию».

2 голосов
/ 04 июня 2014

Начиная с PHP 5.5, curl_reset можно использовать для сброса всех предыдущих опций набора.

Для PHP <5.5 решение Ли-чжи Ву является возможным обходным путем. </p>

0 голосов
/ 28 марта 2012

Вы можете просто использовать curl_setopt_array вместо повторного использования контекста

$file = 'log.txt';
$fh = fopen($file, 'rw');

$options = array(
        CURLOPT_URL => 'http://localhost/lab/stackoverflow/b.php',
        CURLOPT_PUT => 1,
        CURLOPT_INFILE => $fh,
        CURLOPT_INFILESIZE => filesize($file),
        CURLOPT_HEADER => false
);

// First Request
curl_setopt_array($ch = curl_init(), $options);
echo curl_exec($ch);
fclose($fh);

// Secound Request
$options[CURLOPT_URL] = "http://localhost/lab/stackoverflow/c.php";
unset($options[CURLOPT_INFILE], $options[CURLOPT_INFILESIZE]);
curl_setopt_array($ch = curl_init(), $options);
echo curl_exec($ch);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...