PluginProbe ʕ •ᴥ•ʔ
Premium Addons for Elementor – Powerful Elementor Templates & Widgets / 4.11.77
Premium Addons for Elementor – Powerful Elementor Templates & Widgets v4.11.77
4.11.79 4.11.78 4.11.77 4.11.76 4.11.75 3.20.5 4.11.69 3.20.6 4.11.7 3.20.7 4.11.70 3.20.8 4.11.71 3.20.9 4.11.72 3.21.1 4.11.73 3.21.2 4.11.74 3.21.3 4.11.8 3.21.4 4.11.9 3.21.5 4.2.0 3.21.6 4.2.1 3.3.0 4.2.2 3.3.1 4.2.3 3.3.2 4.2.4 3.3.3 4.2.5 3.3.4 4.2.6 3.3.5 4.2.7 3.3.6 4.2.8 3.3.7 4.2.9 3.3.8 4.3.0 3.3.9 4.3.1 3.4.0 4.3.2 3.4.1 4.3.3 3.4.2 4.3.4 3.4.3 4.3.5 3.4.4 4.3.6 3.4.5 4.3.7 3.4.6 4.3.8 3.4.7 4.3.9 3.4.8 4.4.0 3.4.9 4.4.1 3.5.0 4.4.2 3.5.1 4.4.3 3.5.2 4.4.4 3.5.3 4.4.5 3.5.4 4.4.6 3.5.5 4.4.7 3.5.6 4.4.8 3.5.7 4.4.9 3.5.8 4.5.0 3.5.9 4.5.1 3.6.0 4.5.2 3.6.1 4.5.3 3.6.2 4.5.4 3.6.3 4.5.5 3.6.4 4.5.6 3.6.5 4.5.7 3.6.6 4.5.8 3.6.7 4.5.9 3.6.8 4.6.0 3.6.9 4.6.1 3.7.0 4.7.0 3.7.1 4.7.1 3.7.2 4.7.2 3.7.3 4.7.3 3.7.4 4.7.4 3.7.5 4.7.5 3.7.6 4.7.6 3.7.7 4.7.7 3.7.8 4.7.8 3.7.9 4.7.9 3.8.0 4.8.0 3.8.1 4.8.1 3.8.2 4.8.10 3.8.3 4.8.11 3.8.4 4.8.2 3.8.5 4.8.3 3.8.6 4.8.4 3.8.7 4.8.5 3.8.8 4.8.6 3.8.9 4.8.7 3.9.0 4.8.8 3.9.1 4.8.9 3.9.2 4.9.0 3.9.3 4.9.0-beta1 3.9.4 4.9.0-beta2 3.9.5 4.9.1 3.9.6 4.9.10 3.9.7 4.9.11 3.9.8 4.9.12 3.9.9 4.9.13 4.0.1 4.9.14 4.0.3 4.9.15 4.0.4 4.9.16 4.0.5 4.9.17 4.0.6 4.9.18 4.0.7 4.9.19 4.0.8 4.9.2 4.0.9 4.9.20 4.1.0 4.9.21 4.1.1 4.9.22 4.1.2 4.9.23 4.1.3 4.9.24 trunk 4.1.4 4.9.25 1.0 4.1.5 4.9.26 1.01 4.1.6 4.9.27 1.02 4.1.7 4.9.28 1.03 4.1.8 4.9.29 1.04 4.1.9 4.9.3 1.05 4.10.0 4.9.30 1.06 4.10.1 4.9.31 1.07 4.10.10 4.9.32 1.08 4.10.11 4.9.33 1.09 4.10.12 4.9.34 2.0 4.10.13 4.9.35 2.0.1 4.10.14 4.9.36 2.0.2 4.10.15 4.9.37 2.0.3 4.10.16 4.9.38 2.0.4 4.10.17 4.9.39 2.0.5 4.10.18 4.9.4 2.0.6 4.10.19 4.9.40 2.0.7 4.10.2 4.9.41 2.0.8 4.10.20 4.9.42 2.0.9 4.10.21 4.9.43 2.1.0 4.10.22 4.9.45 2.1.1 4.10.23 4.9.46 2.1.2 4.10.24 4.9.47 2.1.3 4.10.25 4.9.48 2.1.4 4.10.26 4.9.49 2.1.5 4.10.27 4.9.5 2.1.5-beta1 4.10.28 4.9.50 2.1.6 4.10.29 4.9.51 2.1.7 4.10.3 4.9.52 2.1.8 4.10.30 4.9.53 2.1.9 4.10.31 4.9.54 2.2.0 4.10.32 4.9.55 2.2.1 4.10.33 4.9.56 2.2.2 4.10.34 4.9.57 2.2.3 4.10.35 4.9.6 2.2.4 4.10.36 4.9.7 2.2.5 4.10.37 4.9.8 2.2.6 4.10.38 4.9.9 2.2.7 4.10.39 2.2.8 4.10.4 2.2.9 4.10.40 2.3.0 4.10.41 2.3.1 4.10.42 2.3.2 4.10.43 2.3.3 4.10.44 2.3.4 4.10.45 2.3.5 4.10.46 2.3.6 4.10.47 2.3.7 4.10.48 2.3.8 4.10.49 2.3.9 4.10.5 2.4.0 4.10.50 2.4.1 4.10.51 2.5.0 4.10.52 2.5.1 4.10.53 2.5.2 4.10.54 2.5.3 4.10.55 2.5.4 4.10.56 2.5.5 4.10.57 2.5.6 4.10.58 2.5.7 4.10.59 2.5.8 4.10.6 2.5.9 4.10.60 2.6.0 4.10.61 2.6.1 4.10.62 2.6.2 4.10.63 2.6.3 4.10.64 2.6.4 4.10.65 2.6.5 4.10.66 2.6.6 4.10.67 2.6.7 4.10.68 2.6.8 4.10.69 2.6.9 4.10.7 2.7.0 4.10.70 2.7.1 4.10.71 2.7.2 4.10.72 2.7.3 4.10.73 2.7.4 4.10.74 2.7.5 4.10.75 2.7.6 4.10.76 2.7.7 4.10.77 2.7.8 4.10.78 2.7.9 4.10.79 2.8.0 4.10.8 2.8.1 4.10.80 2.8.2 4.10.81 2.8.3 4.10.82 2.8.4 4.10.83 2.8.5 4.10.84 2.8.6 4.10.85 2.8.7 4.10.86 2.8.8 4.10.87 2.8.9 4.10.88 2.9.0 4.10.89 2.9.1 4.10.9 2.9.2 4.10.90 2.9.3 4.11.0 2.9.4 4.11.1 2.9.5 4.11.10 2.9.6 4.11.11 2.9.7 4.11.12 2.9.8 4.11.13 2.9.9 4.11.14 3.0.0 4.11.15 3.0.1 4.11.16 3.0.2 4.11.17 3.0.3 4.11.18 3.0.4 4.11.19 3.0.5 4.11.2 3.0.6 4.11.20 3.0.7 4.11.21 3.0.8 4.11.22 3.0.9 4.11.23 3.1.0 4.11.24 3.1.1 4.11.25 3.1.2 4.11.26 3.1.3 4.11.27 3.1.4 4.11.28 3.1.5 4.11.29 3.1.6 4.11.3 3.1.7 4.11.30 3.1.8 4.11.31 3.1.9 4.11.32 3.10.0 4.11.33 3.10.1 4.11.34 3.10.2 4.11.35 3.10.3 4.11.36 3.10.4 4.11.37 3.10.5 4.11.38 3.10.6 4.11.39 3.10.7 4.11.4 3.10.8 4.11.40 3.10.9 4.11.41 3.11.0 4.11.42 3.11.1 4.11.43 3.11.2 4.11.44 3.11.3 4.11.45 3.11.4 4.11.46 3.11.5 4.11.47 3.11.6 4.11.48 3.11.7 4.11.49 3.11.8 4.11.5 3.11.9 4.11.50 3.12.0 4.11.51 3.12.1 4.11.52 3.12.2 4.11.53 3.12.3 4.11.54 3.2.0 4.11.55 3.2.1 4.11.56 3.2.2 4.11.57 3.2.3 4.11.58 3.2.4 4.11.59 3.2.5 4.11.6 3.2.6 4.11.60 3.2.7 4.11.61 3.2.8 4.11.62 3.2.9 4.11.63 3.20.0 4.11.64 3.20.1 4.11.65 3.20.2 4.11.66 3.20.3 4.11.67 3.20.4 4.11.68
premium-addons-for-elementor / widgets / dep / urlopen.php
premium-addons-for-elementor / widgets / dep Last commit date
form-presets 2 months ago pa-pins-handler.php 1 month ago pa-tiktok-handler.php 1 month ago pa-weather-handler.php 1 month ago urlopen.php 1 month ago
urlopen.php
298 lines
1 <?php
2
3 if ( ! function_exists( 'rplg_urlopen' ) ) {
4
5 define( 'RPLG_USER_AGENT', 'RPLG-WPPlugin/1.0' );
6 define( 'RPLG_SOCKET_TIMEOUT', 10 );
7
8 function rplg_json_decode( $data ) {
9 return json_decode( $data );
10 }
11
12 function rplg_json_urlopen( $url, $postdata = false, $headers = array() ) {
13 if ( ! ( $response = rplg_urlopen( $url, $postdata, $headers ) ) || ! $response['code'] ) {
14 // $this->last_error = 'COULDNT_CONNECT';
15 return false;
16 }
17 return rplg_json_decode( $response['data'] );
18 }
19
20 function rplg_urlopen( $url, $postdata = false, $headers = array() ) {
21 $response = array(
22 'data' => '',
23 'code' => 0,
24 );
25
26 $url = preg_replace( '/\s+/', '+', $url );
27
28 if ( function_exists( 'curl_init' ) ) {
29 if ( ! function_exists( 'curl_setopt_array' ) ) {
30 function curl_setopt_array( &$ch, $curl_options ) {
31 foreach ( $curl_options as $option => $value ) {
32 if ( ! curl_setopt( $ch, $option, $value ) ) {
33 return false;
34 }
35 }
36 return true;
37 }
38 }
39 _rplg_curl_urlopen( $url, $postdata, $headers, $response );
40 } elseif ( ini_get( 'allow_url_fopen' ) && function_exists( 'stream_get_contents' ) ) {
41 _rplg_fopen_urlopen( $url, $postdata, $headers, $response );
42 } else {
43 _rplg_fsockopen_urlopen( $url, $postdata, $headers, $response );
44 }
45 return $response;
46 }
47
48 /*-------------------------------- curl --------------------------------*/
49 function _rplg_curl_urlopen( $url, $postdata, $headers, &$response ) {
50 $c = curl_init( $url );
51
52 if ( ! $c ) {
53 return false; // Handle the error if curl_init fails
54 }
55
56 $postdata_str = rplg_get_query_string( $postdata );
57
58 $c_options = array(
59 CURLOPT_USERAGENT => RPLG_USER_AGENT,
60 CURLOPT_RETURNTRANSFER => true,
61 CURLOPT_POST => ( $postdata_str ? 1 : 0 ),
62 CURLOPT_HEADER => true,
63 CURLOPT_HTTPHEADER => array_merge( array( 'Expect:' ), $headers ),
64 CURLOPT_TIMEOUT => RPLG_SOCKET_TIMEOUT,
65 );
66
67 if ( $postdata ) {
68 $c_options[ CURLOPT_POSTFIELDS ] = $postdata_str;
69 }
70
71 curl_setopt_array( $c, $c_options );
72
73 $open_basedir = ini_get( 'open_basedir' );
74 if ( empty( $open_basedir ) ) {
75 curl_setopt( $c, CURLOPT_FOLLOWLOCATION, true );
76 }
77
78 curl_setopt( $c, CURLOPT_SSL_VERIFYPEER, false );
79
80 $data = curl_exec( $c );
81
82 if ( $data === false ) {
83 curl_close( $c );
84 return false; // Handle the error if curl_exec fails
85 }
86
87 // cURL automatically handles Proxy rewrites, remove the "HTTP/1.0 200 Connection established" string
88 if ( stripos( $data, "HTTP/1.0 200 Connection established\r\n\r\n" ) !== false ) {
89 $data = str_ireplace( "HTTP/1.0 200 Connection established\r\n\r\n", '', $data );
90 }
91
92 $parts = explode( "\r\n\r\n", $data, 2 );
93
94 if ( ! isset( $parts[0] ) || empty( $parts[0] ) ) {
95 curl_close( $c );
96 return false;
97 }
98
99 $resp_headers = $parts[0];
100 $response['data'] = $parts[1];
101
102 $response['headers'] = _rplg_get_response_headers( $resp_headers, $response );
103 $response['code'] = curl_getinfo( $c, CURLINFO_HTTP_CODE );
104
105 curl_close( $c );
106
107 return $response;
108 }
109
110 /*-------------------------------- fopen --------------------------------*/
111 function _rplg_fopen_urlopen( $url, $postdata, $headers, &$response ) {
112 $params = array();
113
114 if ( $postdata ) {
115 $params = array(
116 'http' => array(
117 'method' => 'POST',
118 'header' => implode( "\r\n", array_merge( array( 'Content-Type: application/x-www-form-urlencoded' ), $headers ) ),
119 'content' => rplg_get_query_string( $postdata ),
120 'timeout' => RPLG_SOCKET_TIMEOUT,
121 ),
122 );
123 } else {
124 $params = array(
125 'http' => array(
126 'header' => implode( "\r\n", $headers ),
127 ),
128 );
129 }
130
131 ini_set( 'user_agent', RPLG_USER_AGENT );
132 $ctx = stream_context_create( $params );
133 $fp = fopen( $url, 'rb', false, $ctx );
134 if ( ! $fp ) {
135 return false; }
136
137 $response_header_array = explode( ' ', $http_response_header[0], 3 );
138
139 $response['code'] = isset( $response_header_array[1] ) ? $response_header_array[1] : 0;
140
141 $resp_headers = array_slice( $http_response_header, 1 );
142
143 foreach ( $resp_headers as $header ) {
144 $header = explode( ':', $header, 2 );
145 $header[0] = trim( $header[0] );
146 if ( ! isset( $header[1] ) ) {
147 continue;
148 }
149 $header[1] = trim( $header[1] );
150 $resp_headers[ strtolower( $header[0] ) ] = strtolower( $header[1] );
151 }
152 $response['data'] = stream_get_contents( $fp );
153 $response['headers'] = $resp_headers;
154 }
155
156 /*-------------------------------- fsockpen --------------------------------*/
157 function _rplg_fsockopen_urlopen( $url, $postdata, $headers, &$response ) {
158 $buf = '';
159 $req = '';
160 $length = 0;
161
162 $postdata_str = rplg_get_query_string( $postdata );
163 $url_pieces = parse_url( $url );
164
165 if ( ! isset( $url_pieces['host'] ) ) {
166 return false; // Return false if the URL is invalid
167 }
168
169 $host = $url_pieces['host'];
170
171 if ( ! isset( $url_pieces['port'] ) ) {
172 switch ( $url_pieces['scheme'] ) {
173 case 'http':
174 $url_pieces['port'] = 80;
175 break;
176 case 'https':
177 $url_pieces['port'] = 443;
178 $host = 'ssl://' . $url_pieces['host'];
179 break;
180 default:
181 return false; // Return false if the scheme is unsupported
182 }
183 }
184
185 $url_pieces['path'] = $url_pieces['path'] ?? '/';
186 $req_host = ( $url_pieces['port'] == 80 && $url_pieces['scheme'] == 'http' ) ||
187 ( $url_pieces['port'] == 443 && $url_pieces['scheme'] == 'https' ) ?
188 $url_pieces['host'] : $url_pieces['host'] . ':' . $url_pieces['port'];
189
190 $fp = @fsockopen( $host, $url_pieces['port'], $errno, $errstr, RPLG_SOCKET_TIMEOUT );
191 if ( ! $fp ) {
192 return false; // Handle error if fsockopen fails
193 }
194
195 $path = $url_pieces['path'] . ( isset( $url_pieces['query'] ) ? '?' . $url_pieces['query'] : '' );
196 $req .= ( $postdata_str ? 'POST' : 'GET' ) . " $path HTTP/1.1\r\n";
197 $req .= "Host: $req_host\r\n";
198 $req .= rplg_get_http_headers_for_request( $postdata_str, $headers );
199 if ( $postdata_str ) {
200 $req .= "\r\n\r\n" . $postdata_str;
201 }
202 $req .= "\r\n\r\n";
203
204 fwrite( $fp, $req );
205
206 while ( ! feof( $fp ) ) {
207 $buf .= fgets( $fp, 4096 );
208 }
209 fclose( $fp ); // Close the connection after reading
210
211 $parts = explode( "\r\n\r\n", $buf, 2 );
212
213 if ( ! isset( $parts[1] ) ) {
214 return false; // Handle case where response body is missing
215 }
216
217 $headers = _rplg_get_response_headers( $parts[0], $response );
218 $response['data'] = $parts[1];
219
220 if ( isset( $headers['transfer-encoding'] ) && strtolower( $headers['transfer-encoding'] ) === 'chunked' ) {
221 $chunk_data = $response['data'];
222 $joined_data = '';
223
224 while ( true ) {
225 list( $chunk_length, $chunk_data ) = explode( "\r\n", $chunk_data, 2 );
226 $chunk_length = hexdec( $chunk_length );
227 if ( ! $chunk_length || ! strlen( $chunk_data ) ) {
228 break;
229 }
230
231 $joined_data .= substr( $chunk_data, 0, $chunk_length );
232 $chunk_data = substr( $chunk_data, $chunk_length + 2 ); // Add 2 for \r\n after chunk
233 $length += $chunk_length;
234 }
235
236 $response['data'] = $joined_data;
237 } else {
238 $length = $headers['content-length'] ?? strlen( $response['data'] );
239 }
240
241 $response['headers'] = $headers;
242 return true; // Return true to indicate success
243 }
244
245 /*-------------------------------- helpers --------------------------------*/
246 function rplg_get_query_string( $params ) {
247 $query = '';
248
249 if ( $params ) {
250 foreach ( $params as $key => $value ) {
251 $query .= urlencode( $key ) . '=' . urlencode( $value ) . '&';
252 }
253 }
254 return $query;
255 }
256
257 function _rplg_get_response_headers( $headers, &$response ) {
258 $headers = explode( "\r\n", $headers );
259
260 $header_array = explode( ' ', $headers[0], 3 );
261
262 $response['code'] = isset( $header_array[1] ) ? $header_array[1] : 0;
263
264 $headers = array_slice( $headers, 1 );
265 foreach ( $headers as $header ) {
266 $header = explode( ':', $header, 2 );
267 $header[0] = trim( $header[0] );
268 if ( ! isset( $header[1] ) ) {
269 continue;
270 }
271 $header[1] = trim( $header[1] );
272 $headers[ strtolower( $header[0] ) ] = $header[1];
273 }
274 return $headers;
275 }
276
277 function rplg_get_http_headers_for_request( $content, $headers ) {
278 $req_headers = array();
279 $req_headers[] = 'User-Agent: ' . RPLG_USER_AGENT;
280 $req_headers[] = 'Connection: close';
281 if ( $content ) {
282 $req_headers[] = 'Content-Length: ' . strlen( $content );
283 $req_headers[] = 'Content-Type: application/x-www-form-urlencoded';
284 }
285 return implode( "\r\n", array_merge( $req_headers, $headers ) );
286 }
287
288 function rplg_url_method() {
289 if ( function_exists( 'curl_init' ) ) {
290 return 'curl';
291 } elseif ( ini_get( 'allow_url_fopen' ) && function_exists( 'stream_get_contents' ) ) {
292 return 'fopen';
293 } else {
294 return 'fsockopen';
295 }
296 }
297 }
298