Skip to content

Commit a0734fa

Browse files
committed
Fix curl-share handling on PHP < 8.5
1 parent fcf461f commit a0734fa

File tree

1 file changed

+19
-10
lines changed

1 file changed

+19
-10
lines changed

src/utils/HttpClient.php

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,11 @@
88

99
final class HttpClient
1010
{
11+
/**
12+
* @var \CurlShareHandle|resource|null
13+
*/
14+
private $shareHandle = null;
15+
1116
/**
1217
* @param non-empty-array<non-empty-string> $urls
1318
* @param list<string> $headers
@@ -16,15 +21,19 @@ final class HttpClient
1621
*/
1722
public function getMulti(array $urls, array $headers): array
1823
{
19-
if (function_exists('curl_share_init_persistent')) {
20-
$share = curl_share_init_persistent([
21-
CURL_LOCK_DATA_DNS,
22-
CURL_LOCK_DATA_CONNECT,
23-
]);
24-
} else {
25-
$share = curl_share_init();
26-
curl_share_setopt($share, CURLSHOPT_SHARE, CURL_LOCK_DATA_DNS);
27-
curl_share_setopt($share, CURLSHOPT_SHARE, CURL_LOCK_DATA_CONNECT);
24+
if ($this->shareHandle === null) {
25+
if (function_exists('curl_share_init_persistent')) {
26+
$this->shareHandle = curl_share_init_persistent([
27+
CURL_LOCK_DATA_DNS,
28+
CURL_LOCK_DATA_CONNECT,
29+
CURL_LOCK_DATA_SSL_SESSION
30+
]);
31+
} else {
32+
$this->shareHandle = curl_share_init();
33+
curl_share_setopt($this->shareHandle, CURLSHOPT_SHARE, CURL_LOCK_DATA_DNS);
34+
curl_share_setopt($this->shareHandle, CURLSHOPT_SHARE, CURL_LOCK_DATA_CONNECT);
35+
curl_share_setopt($this->shareHandle, CURLSHOPT_SHARE, CURL_LOCK_DATA_SSL_SESSION);
36+
}
2837
}
2938

3039
$mh = curl_multi_init();
@@ -37,7 +46,7 @@ public function getMulti(array $urls, array $headers): array
3746
throw new RuntimeException('Could not initialize cURL connection');
3847
}
3948

40-
curl_setopt($curl, CURLOPT_SHARE, $share);
49+
curl_setopt($curl, CURLOPT_SHARE, $this->shareHandle);
4150

4251
// see https://stackoverflow.com/a/27776164/1597388
4352
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 3);

0 commit comments

Comments
 (0)