PluginProbe ʕ •ᴥ•ʔ
MailPoet – Newsletters, Email Marketing, and Automation / 5.34.2
MailPoet – Newsletters, Email Marketing, and Automation v5.34.2
5.36.0 5.35.1 5.35.0 5.34.3 5.34.2 5.34.1 5.34.0 5.33.1 5.33.0 5.32.0 5.31.0 5.30.0 5.29.0 5.28.1 5.28.0 5.27.0 5.26.0 5.26.1 5.25.0 5.24.0 4.43.0 4.43.1 4.44.0 4.44.1 4.45.0 4.46.0 4.47.0 4.48.0 4.48.1 4.48.2 4.49.0 4.49.1 4.5.0 4.5.1 4.5.2 4.50.0 4.50.1 4.51.0 4.51.1 4.51.2 4.52.0 4.53.0 4.54.0 4.55.0 4.56.0 4.57.0 4.58.0 4.58.1 4.58.2 4.6.0 4.6.1 4.6.2 4.7.0 4.7.1 4.8.0 4.8.1 4.9.0 5.0.0 5.0.1 5.0.2 5.1.0 5.1.1 5.10.0 5.10.1 5.11.0 5.12.0 5.12.1 5.12.10 5.12.11 5.12.12 5.12.13 5.12.2 5.12.3 5.12.4 5.12.5 5.12.6 5.12.7 5.12.8 5.12.9 5.13.0 5.13.1 5.13.2 5.14.0 5.14.1 5.14.2 5.14.3 5.15.0 5.15.1 5.16.0 5.16.1 5.16.2 5.16.3 5.16.4 5.17.0 5.17.1 5.17.2 5.17.3 5.17.4 5.17.5 5.17.6 5.18.0 5.19.0 5.2.0 5.2.1 5.2.2 5.2.3 5.20.0 5.21.0 5.21.1 5.21.2 5.21.3 5.22.0 5.22.1 5.22.2 5.22.3 5.22.4 5.23.0 5.23.1 5.23.2 5.3.0 5.3.1 5.3.2 5.3.3 5.3.4 5.3.5 5.3.6 5.3.7 5.4.0 5.4.1 5.4.2 5.5.0 5.5.1 5.5.2 5.6.0 5.6.1 5.6.2 5.6.3 5.6.4 5.7.0 5.7.1 5.8.0 5.8.1 5.9.0 3.0.0-beta.15 3.7.1 3.0.0-beta.16 3.7.2 3.0.0-beta.17 3.7.3 3.0.0-beta.18 3.7.4 3.0.0-beta.19 3.7.5 3.0.0-beta.2 3.7.6 3.0.0-beta.20 3.7.8 3.0.0-beta.21 3.70.0 3.0.0-beta.22 3.71.0 3.0.0-beta.23 3.71.1 3.0.0-beta.23.1 3.71.2 3.0.0-beta.23.2 3.71.3 3.0.0-beta.24 3.72.0 3.0.0-beta.25 3.73.0 3.0.0-beta.26 3.73.1 3.0.0-beta.27 3.73.2 3.0.0-beta.28 3.74.0 3.0.0-beta.29 3.74.1 3.0.0-beta.3 3.74.2 3.0.0-beta.30 3.74.3 3.0.0-beta.31 3.75.0 3.0.0-beta.32 3.75.1 3.0.0-beta.33 3.76.0 3.0.0-beta.33.1 3.77.0 3.0.0-beta.34.0.0 3.77.1 3.0.0-beta.36.0.0 3.78.0 3.0.0-beta.36.0.1 3.79.0 3.0.0-beta.36.2.0 3.8 3.0.0-beta.36.3.0 3.8.1 3.0.0-beta.36.3.1 3.8.2 3.0.0-beta.37.0.0 3.8.3 3.0.0-beta.4 3.8.4 3.0.0-beta.5 3.8.5 3.0.0-beta.6 3.8.6 3.0.0-beta.7 3.80.0 3.0.0-beta.7.1 3.81.0 3.0.0-beta.8 3.82.0 3.0.0-beta.9 3.83.0 3.0.0-rc.1.0.0 3.84.0 3.0.0-rc.1.0.1 3.84.1 3.0.0-rc.1.0.2 3.85.0 3.0.0-rc.1.0.3 3.85.1 3.0.0-rc.1.0.4 3.86.0 3.0.0-rc.2.0.0 3.87.0 3.0.0-rc.2.0.1 3.87.1 3.0.0-rc.2.0.2 3.87.2 3.0.0-rc.2.0.3 3.88.0 3.0.1 3.88.1 3.0.2 3.88.2 3.0.3 3.89.0 3.0.4 3.89.1 3.0.5 3.89.2 3.0.6 3.89.3 3.0.7 3.89.4 3.0.8 3.9.0 3.0.9 3.9.1 3.1.0 3.90.0 3.10 3.90.1 3.10.1 3.90.2 3.100.0 3.91.0 3.100.1 3.91.1 3.100.2 3.92.0 3.101.0 3.92.1 3.101.1 3.93.0 3.102.0 3.93.1 3.102.1 3.94.0 3.103.0 3.95.0 3.103.1 3.95.1 3.11.0 3.96.0 3.11.1 3.96.1 3.11.2 3.97.0 3.11.3 3.98.0 3.11.4 3.98.1 3.11.5 3.99.0 3.12.0 3.99.1 3.12.1 4.0.0 3.13.0 4.0.1 3.14.0 4.1.0 3.14.1 4.1.1 3.15.0 4.10.0 3.16.0 4.11.0 3.16.1 4.11.1 3.16.2 4.12.0 3.16.3 4.12.1 3.17.0 4.12.2 3.17.1 4.13.0 3.17.2 4.14.0 3.18.0 4.15.0 3.18.1 4.16.0 3.18.2 4.17.0 3.19.0 4.17.1 3.19.1 4.18.0 3.19.2 4.18.1 3.19.3 4.19.0 3.2.0 4.2.0 3.2.1 4.20.0 3.2.2 4.20.1 3.2.3 4.20.2 3.2.4 4.21.0 3.2.5 4.22.0 3.20.0 4.22.1 3.21.0 4.22.2 3.21.1 4.23.0 3.22.0 4.24.0 3.23.0 4.25.0 3.23.1 4.26.0 3.23.2 4.26.1 3.24.0 4.27.0 3.25.0 4.28.0 3.25.1 4.29.0 3.26.0 4.3.0 3.26.1 4.3.1 3.27.0 4.30.0 3.28.0 4.31.0 3.29.0 4.31.1 3.3.0 4.32.0 3.3.1 4.33.0 3.3.2 4.34.0 3.3.3 4.35.0 3.3.4 4.35.1 3.3.5 4.36.0 3.3.6 4.37.0 3.30.0 4.38.0 3.31.0 4.39.0 3.31.1 4.4.0 3.32.0 4.40.0 3.32.1 4.41.0 3.32.2 4.41.1 3.33.0 4.41.2 3.34.0 4.41.3 3.34.1 4.42.0 3.34.2 4.42.1 3.34.3 3.34.4 3.35.0 3.35.1 3.35.3 3.35.4 3.36.0 3.37.0 3.37.1 3.37.2 3.37.3 3.38.0 3.38.1 3.39.0 3.39.1 3.39.2 3.4.0 3.4.1 3.4.2 3.4.3 3.4.4 3.40.0 3.40.1 3.41.0 3.41.1 3.41.2 3.42.0 3.42.1 3.42.2 3.42.3 3.43.0 3.43.1 3.44.0 3.45.0 3.45.1 3.46.0 3.46.1 3.46.10 3.46.11 3.46.12 3.46.13 3.46.14 3.46.2 3.46.3 3.46.4 3.46.5 3.46.6 3.46.7 3.46.8 3.46.9 3.47.0 3.47.1 3.47.10 3.47.11 3.47.2 3.47.3 3.47.5 3.47.6 3.47.7 3.47.9 3.48.0 3.48.1 3.49.0 3.49.1 3.5.0 3.5.1 3.50.0 3.51.0 3.51.1 3.51.2 3.52.0 3.53.0 3.54.0 3.54.1 3.54.2 3.54.3 3.55.0 3.55.1 3.56.0 3.56.1 3.56.2 3.57.0 3.57.1 3.58.0 3.59.0 3.59.1 3.59.2 3.6.0 3.6.1 3.6.2 3.6.3 3.6.4 3.6.5 3.6.6 3.6.7 3.60.0 3.60.1 3.60.10 3.60.11 3.60.12 3.60.2 3.60.3 3.60.4 3.60.6 3.60.7 3.60.8 3.60.9 3.61.0 3.62.0 3.62.1 3.63.0 3.64.0 3.64.1 3.64.2 3.64.3 3.65.0 trunk 3.65.1 3.0.0 3.66.0 3.0.0-beta.1 3.67.0 3.0.0-beta.10 3.67.1 3.0.0-beta.11 3.68.0 3.0.0-beta.12 3.69.0 3.0.0-beta.13 3.69.1 3.0.0-beta.14 3.7.0
mailpoet / vendor / mixpanel / mixpanel-php / lib / ConsumerStrategies / CurlConsumer.php
mailpoet / vendor / mixpanel / mixpanel-php / lib / ConsumerStrategies Last commit date
AbstractConsumer.php 2 years ago CurlConsumer.php 2 years ago FileConsumer.php 2 years ago SocketConsumer.php 2 years ago index.php 2 years ago
CurlConsumer.php
143 lines
1 <?php
2 if (!defined('ABSPATH')) exit;
3 require_once(dirname(__FILE__) . "/AbstractConsumer.php");
4 class ConsumerStrategies_CurlConsumer extends ConsumerStrategies_AbstractConsumer {
5 protected $_host;
6 protected $_endpoint;
7 protected $_connect_timeout;
8 protected $_timeout;
9 protected $_protocol;
10 protected $_fork = null;
11 protected $_num_threads;
12 function __construct($options) {
13 parent::__construct($options);
14 $this->_host = $options['host'];
15 $this->_endpoint = $options['endpoint'];
16 $this->_connect_timeout = isset($options['connect_timeout']) ? $options['connect_timeout'] : 5;
17 $this->_timeout = isset($options['timeout']) ? $options['timeout'] : 30;
18 $this->_protocol = isset($options['use_ssl']) && $options['use_ssl'] == true ? "https" : "http";
19 $this->_fork = isset($options['fork']) ? ($options['fork'] == true) : false;
20 $this->_num_threads = isset($options['num_threads']) ? max(1, intval($options['num_threads'])) : 1;
21 // ensure the environment is workable for the given settings
22 if ($this->_fork == true) {
23 $exists = function_exists('exec');
24 if (!$exists) {
25 throw new Exception('The "exec" function must exist to use the cURL consumer in "fork" mode. Try setting fork = false or use another consumer.');
26 }
27 $disabled = explode(', ', ini_get('disable_functions'));
28 $enabled = !in_array('exec', $disabled);
29 if (!$enabled) {
30 throw new Exception('The "exec" function must be enabled to use the cURL consumer in "fork" mode. Try setting fork = false or use another consumer.');
31 }
32 } else {
33 if (!function_exists('curl_init')) {
34 throw new Exception('The cURL PHP extension is required to use the cURL consumer with fork = false. Try setting fork = true or use another consumer.');
35 }
36 }
37 }
38 public function persist($batch) {
39 if (count($batch) > 0) {
40 $url = $this->_protocol . "://" . $this->_host . $this->_endpoint;
41 if ($this->_fork) {
42 $data = "data=" . $this->_encode($batch);
43 return $this->_execute_forked($url, $data);
44 } else {
45 return $this->_execute($url, $batch);
46 }
47 } else {
48 return true;
49 }
50 }
51 protected function _execute($url, $batch) {
52 if ($this->_debug()) {
53 $this->_log("Making blocking cURL call to $url");
54 }
55 $mh = curl_multi_init();
56 $chs = array();
57 $batch_size = ceil(count($batch) / $this->_num_threads);
58 for ($i=0; $i<$this->_num_threads && !empty($batch); $i++) {
59 $ch = curl_init();
60 $chs[] = $ch;
61 $data = "data=" . $this->_encode(array_splice($batch, 0, $batch_size));
62 curl_setopt($ch, CURLOPT_URL, $url);
63 curl_setopt($ch, CURLOPT_HEADER, 0);
64 curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $this->_connect_timeout);
65 curl_setopt($ch, CURLOPT_TIMEOUT, $this->_timeout);
66 curl_setopt($ch, CURLOPT_POST, 1);
67 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
68 curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
69 curl_multi_add_handle($mh,$ch);
70 }
71 $running = 0;
72 do {
73 curl_multi_exec($mh, $running);
74 curl_multi_select($mh);
75 } while ($running > 0);
76 $info = curl_multi_info_read($mh);
77 $error = false;
78 foreach ($chs as $ch) {
79 $response = curl_multi_getcontent($ch);
80 if (false === $response) {
81 $this->_handleError(curl_errno($ch), curl_error($ch));
82 $error = true;
83 }
84 elseif ("1" != trim($response)) {
85 $this->_handleError(0, $response);
86 $error = true;
87 }
88 curl_multi_remove_handle($mh, $ch);
89 }
90 if (CURLE_OK != $info['result']) {
91 $this->_handleError($info['result'], "cURL error with code=".$info['result']);
92 $error = true;
93 }
94 curl_multi_close($mh);
95 return !$error;
96 }
97 protected function _execute_forked($url, $data) {
98 if ($this->_debug()) {
99 $this->_log("Making forked cURL call to $url");
100 }
101 $exec = 'curl -X POST -H "Content-Type: application/x-www-form-urlencoded" -d ' . $data . ' "' . $url . '"';
102 if(!$this->_debug()) {
103 $exec .= " >/dev/null 2>&1 &";
104 }
105 exec($exec, $output, $return_var);
106 if ($return_var != 0) {
107 $this->_handleError($return_var, $output);
108 }
109 return $return_var == 0;
110 }
111 public function getConnectTimeout()
112 {
113 return $this->_connect_timeout;
114 }
115 public function getEndpoint()
116 {
117 return $this->_endpoint;
118 }
119 public function getFork()
120 {
121 return $this->_fork;
122 }
123 public function getHost()
124 {
125 return $this->_host;
126 }
127 public function getOptions()
128 {
129 return $this->_options;
130 }
131 public function getProtocol()
132 {
133 return $this->_protocol;
134 }
135 public function getTimeout()
136 {
137 return $this->_timeout;
138 }
139 public function getNumThreads() {
140 return $this->_num_threads;
141 }
142 }
143