在 PHP 中执行 PUT 请求后如何重用 cUrl 上下文?

raz*_*ard 5 php curl

我有一些代码,我试图重用 curl 上下文来执行放置请求和获取请求。在每个 put 请求之后,get 请求失败并显示此 PHP 警告:

curl_exec():CURLOPT_INFILE 资源已消失,重置为默认值

我可以使用 PHP 关闭操作符,但我宁愿正确重置 curl 上下文。有谁知道如何做到这一点?我也可以使用不同的 curl 上下文,但我宁愿重用连接,因为应用程序正在发送大量请求。我可以保持文件句柄打开,但这似乎是一个骇人听闻的解决方案,尤其是因为这都包含在函数中,所以我可以调用doPutdoGet

$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);
Run Code Online (Sandbox Code Playgroud)

谢谢。

K.C*_*ang 3

从 PHP 5.5 开始,curl_reset可用于重置所有以前设置的选项。

对于 PHP < 5.5,Li-chih Wu 的解决方案是一种可能的解决方法。