MultiCurl::execute()   A
last analyzed

Complexity

Conditions 4
Paths 4

Size

Total Lines 25
Code Lines 16

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 20

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 4
eloc 16
c 1
b 0
f 0
nc 4
nop 1
dl 0
loc 25
ccs 0
cts 16
cp 0
crap 20
rs 9.7333
1
<?php
2
3
namespace EVB\Weather;
4
5
/**
6
 * Wrapper for simple curl_multi requests.
7
 */
8
class MultiCurl implements MultiCurlInterface
9
{
10
    /**
11
     * Executes requests to $urls and
12
     * returns the results in an array.
13
     *
14
     * @param array $urls
15
     * @return array
16
     */
17
    public function execute(array $urls) : array
18
    {
19
        $handles = [];
20
        $result = [];
21
        $multiHandle = \curl_multi_init();
22
23
        foreach ($urls as $i => $url) {
24
            $handles[$i] = \curl_init($url);
25
            \curl_setopt($handles[$i], CURLOPT_RETURNTRANSFER, 1);
26
            \curl_multi_add_handle($multiHandle, $handles[$i]);
27
        }
28
29
        $stillRunning = 0;
30
        do {
31
            \curl_multi_exec($multiHandle, $stillRunning);
32
        } while ($stillRunning > 0);
33
34
        foreach ($handles as $i => $handle) {
35
            $result[$i] = \json_decode(\curl_multi_getcontent($handle), true);
36
            \curl_multi_remove_handle($multiHandle, $handle);
37
        }
38
39
        \curl_multi_close($multiHandle);
40
41
        return $result;
42
    }
43
}
44