WPCOM_VIP_Cache_Manager::curl_multi PHP Method

curl_multi() public method

public curl_multi ( $requests )
    public function curl_multi($requests)
    {
        $curl_multi = curl_multi_init();
        foreach ($requests as $req) {
            if (defined('PURGE_SERVER_TYPE') && 'mangle' == PURGE_SERVER_TYPE) {
                $data = array('group' => 'vip-go', 'scope' => 'global', 'type' => $req['method'], 'uri' => $req['host'] . $req['uri'], 'cb' => 'nil');
                $json = json_encode($data);
                $curl = curl_init();
                curl_setopt($curl, CURLOPT_URL, constant('PURGE_SERVER_URL'));
                curl_setopt($curl, CURLOPT_POST, true);
                curl_setopt($curl, CURLOPT_POSTFIELDS, $json);
                curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: application/json', 'Content-Length: ' . strlen($json)));
                curl_setopt($curl, CURLOPT_TIMEOUT, 5);
                curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
                curl_multi_add_handle($curl_multi, $curl);
            } else {
                // Purge HTTP
                $curl = curl_init();
                curl_setopt($curl, CURLOPT_URL, "http://{$req['ip']}{$req['uri']}");
                curl_setopt($curl, CURLOPT_PORT, $req['port']);
                curl_setopt($curl, CURLOPT_HTTPHEADER, array("Host: {$req['host']}", "X-Forwarded-Proto: http"));
                curl_setopt($curl, CURLOPT_CUSTOMREQUEST, $req['method']);
                curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
                curl_setopt($curl, CURLOPT_NOBODY, true);
                curl_setopt($curl, CURLOPT_HEADER, true);
                curl_setopt($curl, CURLOPT_TIMEOUT, 5);
                curl_multi_add_handle($curl_multi, $curl);
                // Purge HTTPS
                $curl = curl_init();
                curl_setopt($curl, CURLOPT_URL, "http://{$req['ip']}{$req['uri']}");
                curl_setopt($curl, CURLOPT_PORT, $req['port']);
                curl_setopt($curl, CURLOPT_HTTPHEADER, array("Host: {$req['host']}", "X-Forwarded-Proto: https"));
                curl_setopt($curl, CURLOPT_CUSTOMREQUEST, $req['method']);
                curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
                curl_setopt($curl, CURLOPT_NOBODY, true);
                curl_setopt($curl, CURLOPT_HEADER, true);
                curl_setopt($curl, CURLOPT_TIMEOUT, 5);
                curl_multi_add_handle($curl_multi, $curl);
            }
        }
        $running = true;
        while ($running) {
            do {
                $result = curl_multi_exec($curl_multi, $running);
            } while ($result == CURLM_CALL_MULTI_PERFORM);
            if ($result != CURLM_OK) {
                error_log('curl_multi_exec() returned something different than CURLM_OK');
            }
            curl_multi_select($curl_multi, 0.2);
        }
        while ($completed = curl_multi_info_read($curl_multi)) {
            $info = curl_getinfo($completed['handle']);
            if (!$info['http_code'] && curl_error($completed['handle'])) {
                error_log('Error on: ' . $info['url'] . ' error: ' . curl_error($completed['handle']));
            }
            if ('200' != $info['http_code']) {
                error_log('Request to ' . $info['url'] . ' returned HTTP code ' . $info['http_code']);
            }
            curl_multi_remove_handle($curl_multi, $completed['handle']);
        }
        curl_multi_close($curl_multi);
    }