PluginProbe
Adminify – White Label, Admin Menu Editor, Login Customizer / 3.1.6
Adminify – White Label, Admin Menu Editor, Login Customizer v3.1.6
4.3.1 4.3.0 4.2.26 4.2.25 4.2.24 4.2.23 4.2.22 4.2.21 4.2.20 4.2.19 4.2.18 4.2.17 4.2.16 4.2.15 4.2.14 4.2.13 4.2.12 4.2.11 4.2.10 4.2.9 4.2.8 4.2.7 4.2.6 4.2.5 4.1.17 All 164 releases
adminify / Inc / Classes / ServerInfo.php

ServerInfo.php in Adminify – White Label, Admin Menu Editor, Login Customizer 3.1.6, at Inc/Classes/ServerInfo.php

626 lines 15.8 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace WPAdminify\Inc\Classes;
4
5 use WPAdminify\Inc\Utils;
6
7 // no direct access allowed
8 if ( ! defined( 'ABSPATH' ) ) {
9 exit;
10 }
11 /**
12 * WPAdminify
13 * Admin Menu: Server Info
14 *
15 * @author Jewel Theme <support@jeweltheme.com>
16 */
17
18 class ServerInfo {
19
20
21 /**
22 * SERVER CPU LOAD
23 * Get the server CPU load in percentage.
24 */
25
26 public function get_server_cpu_load_percentage() {
27 $result = -1;
28 $lines = null;
29
30 $os = '';
31 if ( defined( 'PHP_OS' ) ) {
32 $os = PHP_OS;
33 }
34
35 // Linux server
36 if ( $os == 'Linux' ) {
37 $checks = [];
38 foreach ( [ 0, 1 ] as $i ) {
39 $cmd = '/proc/stat';
40 $lines = [];
41 $fh = fopen( $cmd, 'r' );
42 while ( $line = fgets( $fh ) ) {
43 $lines[] = $line;
44 }
45 fclose( $fh );
46 foreach ( $lines as $line ) {
47 $ma = [];
48 if ( ! preg_match( '/^cpu (\d+) (\d+) (\d+) (\d+) (\d+) (\d+) (\d+) (\d+) (\d+) (\d+)$/', $line, $ma ) ) {
49 continue;
50 }
51 $total = $ma[1] + $ma[2] + $ma[3] + $ma[4] + $ma[5] + $ma[6] + $ma[7] + $ma[8] + $ma[9];
52 // $totalCpu = $ma[1] + $ma[2] + $ma[3];
53 // $result = (100 / $total) * $totalCpu;
54 $ma['total'] = $total;
55 $checks[] = $ma;
56 break;
57 }
58 if ( $i == 0 ) {
59 // Wait before checking again.
60 sleep( 1 );
61 }
62 }
63 // Idle - prev idle
64 $diffIdle = $checks[1][4] - $checks[0][4];
65 // Total - prev total
66 $diffTotal = $checks[1]['total'] - $checks[0]['total'];
67 // Usage in %
68 $diffUsage = round( ( 1000 * ( $diffTotal - $diffIdle ) / $diffTotal + 5 ) / 10, 2 );
69 $result = $diffUsage;
70
71 return (float) $result;
72 }
73
74 return 'N/A';
75 }
76
77 /**
78 * Convert Memory Size
79 *
80 * @param [type] $size
81 *
82 * @return void
83 */
84 public function convert_memory_size( $size ) {
85 $l = substr( $size, -1 );
86 $ret = substr( $size, 0, -1 );
87
88 switch ( strtoupper( $l ) ) {
89 case 'P':
90 $ret *= 1024;
91 case 'T':
92 $ret *= 1024;
93 case 'G':
94 $ret *= 1024;
95 case 'M':
96 $ret *= 1024;
97 case 'K':
98 $ret *= 1024;
99 }
100
101 return $ret;
102 }
103
104 /**
105 * Get Server/WP Memory Limit
106 */
107
108 public function get_wp_memory_limit() {
109 $memory_limit = (int) @ini_get( 'memory_limit' ) . ' MB' . ' (' . (int) WP_MEMORY_LIMIT . ' MB)';
110 if ( @ini_get( 'memory_limit' ) == '-1' ) {
111 $memory_limit = '-1 / ' . esc_html__( 'Unlimited', 'adminify' ) . ' (' . (int) WP_MEMORY_LIMIT . ' MB)';
112 }
113
114 if ( (int) WP_MEMORY_LIMIT < (int) @ini_get( 'memory_limit' ) && WP_MEMORY_LIMIT != '-1' || (int) WP_MEMORY_LIMIT < (int) @ini_get( 'memory_limit' ) && @ini_get( 'memory_limit' ) != '-1' ) {
115 $memory_limit .= ' <span class="warning"><span class="dashicons dashicons-warning"></span> ' . sprintf( __( 'The WP PHP Memory Limit is less than the %s Server PHP Memory Limit', 'adminify' ), (int) @ini_get( 'memory_limit' ) . ' MB' ) . '!</span>';
116 }
117
118 return $memory_limit;
119 }
120
121 /**
122 * Get PHP Version
123 */
124 public function get_php_version() {
125 $php_version = 'N/A';
126
127 if ( function_exists( 'phpversion' ) ) {
128 $php_version = phpversion();
129 }
130
131 if ( defined( 'PHP_VERSION' ) ) {
132 $php_version = PHP_VERSION;
133 }
134
135 if ( $php_version != 'N/A' && version_compare( $php_version, '7.3', '<' ) ) {
136 $php_version = '<span class="warning"><span class="dashicons dashicons-warning"></span> ' . sprintf( __( '%1$s - Recommend PHP version of 7.3. See: %2$s', 'adminify' ), esc_html( $php_version ), '<a href="https://wordpress.org/about/requirements/" target="_blank" rel="noopener">' . __( 'WordPress Requirements', 'adminify' ) . '</a>' ) . '</span>';
137 }
138
139 return $php_version;
140 }
141
142 /**
143 * Get PHP Version Only
144 * */
145 public function get_php_version_lite() {
146 $php_version = 'N/A';
147
148 if ( function_exists( 'phpversion' ) ) {
149 $php_version = phpversion();
150 }
151
152 if ( defined( 'PHP_VERSION' ) ) {
153 $php_version = PHP_VERSION;
154 }
155
156 return $php_version;
157 }
158
159 /**
160 * Get Curl Version
161 *
162 * @return void
163 */
164 public function get_cURL_version() {
165 $curl_version = 'N/A';
166
167 if ( function_exists( 'curl_version' ) ) {
168 $curl_version = curl_version();
169 $curl_version = $curl_version['version'] . ', ' . $curl_version['ssl_version'];
170 }
171
172 return $curl_version;
173 }
174
175 /**
176 * Get MySQL Version
177 *
178 * @return void
179 */
180 public function get_mysql_version() {
181 global $wpdb;
182
183 // Short Version
184 // $db_version = $wpdb->db_server_info();
185
186 $db_version_dump = $wpdb->get_var( 'SELECT VERSION() AS version from DUAL' );
187 if ( preg_match( '/\d+(?:\.\d+)+/', $db_version_dump, $matches ) ) {
188 $db_version = $matches[0]; // returning the first match
189 } else {
190 $db_version = __( 'N/A', 'adminify' );
191 }
192 return $db_version;
193 }
194
195
196 /**
197 * Get Get Database Software Name
198 *
199 * @return void
200 */
201 public function get_db_software() {
202 global $wpdb;
203 $db_software_query = $wpdb->get_row( "SHOW VARIABLES LIKE 'version_comment'" );
204 $db_software_dump = $db_software_query->Value;
205 if ( ! empty( $db_software_dump ) ) {
206 $db_soft_array = explode( ' ', trim( $db_software_dump ) );
207 $db_software = $db_soft_array[0];
208 } else {
209 $db_software = __( 'N/A', 'adminify' );
210 }
211
212 return $db_software;
213 }
214
215 /**
216 * Get WP Table Prefix
217 */
218 public function get_table_prefix() {
219 global $wpdb;
220
221 $prefix = [
222 'tablePrefix' => $wpdb->prefix,
223 'tableBasePrefix' => $wpdb->base_prefix,
224 ];
225
226 return $prefix;
227 }
228
229
230 /**
231 * Get WP Timezone
232 */
233
234 public function get_wp_timezone() {
235 $timezone = get_option( 'timezone_string' ); // Direct value
236
237 // Create a UTC+- zone if no timezone string exists
238 if ( empty( $timezone ) ) {
239 // Current offset
240 $current_offset = get_option( 'gmt_offset' );
241
242 // Plus offset
243 $timezone = 'UTC+' . $current_offset;
244
245 // No offset
246 if ( 0 == $current_offset ) {
247 $timezone = 'UTC+0';
248 // Negative offset
249 } elseif ( $current_offset < 0 ) {
250 $timezone = 'UTC' . $current_offset;
251 }
252
253 // Normalize
254 $timezone = str_replace( [ '.25', '.5', '.75' ], [ ':15', ':30', ':45' ], $timezone );
255 }
256
257 return $timezone;
258 }
259
260 /**
261 * Get Server/WP Total RAM
262 *
263 * @return void
264 */
265 public function get_server_total_ram() {
266 $os = '';
267 if ( defined( 'PHP_OS' ) ) {
268 $os = PHP_OS;
269 }
270
271 $result = 0;
272
273 // Linux server
274 if ( $os == 'Linux' ) {
275 $fh = fopen( '/proc/meminfo', 'r' );
276 while ( $line = fgets( $fh ) ) {
277 $pieces = [];
278 if ( preg_match( '/^MemTotal:\s+(\d+)\skB$/', $line, $pieces ) ) {
279 $result = $pieces[1];
280 // KB to Bytes
281 $result = round( $result / 1024 / 1024, 2 );
282 break;
283 }
284 }
285 fclose( $fh );
286
287 return $result;
288 }
289
290 return 'N/A';
291 }
292
293
294 /**
295 * Get Server/WP Free RAM
296 */
297 public function get_server_free_ram() {
298 $os = '';
299 if ( defined( 'PHP_OS' ) ) {
300 $os = PHP_OS;
301 }
302
303 $result = 0;
304
305 // Linux server
306 if ( $os == 'Linux' ) {
307 $fh = fopen( '/proc/meminfo', 'r' );
308 while ( $line = fgets( $fh ) ) {
309 $pieces = [];
310 if ( preg_match( '/^MemFree:\s+(\d+)\skB$/', $line, $pieces ) ) {
311 // KB to Bytes
312 $result = round( $pieces[1] / 1024 / 1024, 2 );
313 break;
314 }
315 }
316 fclose( $fh );
317
318 return $result;
319 }
320
321 return 'N/A';
322 }
323
324 /**
325 * Get Server/WP RAM Details
326 *
327 * @return void
328 */
329 public function get_server_ram_details() {
330 $os = '';
331 if ( defined( 'PHP_OS' ) ) {
332 $os = PHP_OS;
333 }
334
335 $ram_data = '';
336 if ( $os == 'Linux' ) {
337 foreach ( file( '/proc/meminfo' ) as $ri ) {
338 $m[ strtok( $ri, ':' ) ] = strtok( '' );
339 }
340
341 $ram_total = round( (int) $m['MemTotal'] / 1024 / 1024, 2 );
342 $ram_available = round( (int) $m['MemAvailable'] / 1024 / 1024, 2 );
343 $ram_free = round( (int) $m['MemFree'] / 1024 / 1024, 2 );
344 $ram_buffers = round( (int) $m['Buffers'] / 1024 / 1024, 2 );
345 $ram_cached = round( (int) $m['Cached'] / 1024 / 1024, 2 );
346
347 $mem_kernel_app = round( ( 100 - ( $ram_buffers + $ram_cached + $ram_free ) / $ram_total * 100 ), 2 );
348 $mem_cached = round( $ram_cached / $ram_total * 100, 2 );
349 $mem_buffers = round( $ram_buffers / $ram_total * 100, 2 );
350
351 $ram_data = [
352 'MemTotal' => $ram_total,
353 'MemAvailable' => $ram_available,
354 'MemFree' => $ram_free,
355 'Buffers' => $ram_buffers,
356 'Cached' => $ram_cached,
357 'MemUsagePercentage' => round( $mem_kernel_app + $mem_buffers + $mem_cached, 2 ), // Physical Memory
358 ];
359
360 return $ram_data;
361 }
362
363 return 'N/A';
364 }
365
366 /**
367 * Get Real Server Memory Usage
368 */
369 public function get_real_memory_usage() {
370 $real_memory_usage = function_exists( 'memory_get_peak_usage' ) ? round( memory_get_peak_usage( true ) ) : 0;
371
372 if ( $real_memory_usage ) {
373 return $real_memory_usage;
374 }
375
376 return 'N/A';
377 }
378
379 /**
380 * WP Memory Usage
381 */
382 public function get_wp_memory_usage() {
383 // Get WP Memory Limit
384 $get_memory_limit = WP_MEMORY_LIMIT;
385 if ( (int) WP_MEMORY_LIMIT > (int) @ini_get( 'memory_limit' ) ) {
386 // WP Limit can't be greater than Server Limiit
387 $get_memory_limit = @ini_get( 'memory_limit' );
388 }
389
390 $memory_limit_convert = $this->convert_memory_size( $get_memory_limit );
391 $memory_limit_format = size_format( $memory_limit_convert );
392 $memory_limit = $memory_limit_convert;
393
394 // Get Real Memory Usage
395 $get_memory_usage = $this->get_real_memory_usage();
396 $memory_usage_convert = round( $get_memory_usage / 1024 / 1024 );
397 $memory_usage_format = $memory_usage_convert . 'MB';
398 $memory_usage = $get_memory_usage;
399
400 if ( $get_memory_usage != false && $get_memory_limit != false ) {
401
402 // check memory limit is a numeric value
403 if ( ! is_numeric( $memory_limit ) ) {
404 $memory_limit = 999;
405 }
406
407 $wp_mem_data = [
408 'MemLimit' => $memory_limit,
409 'MemLimitGet' => $get_memory_limit,
410 'MemLimitConvert' => $memory_limit_convert,
411 'MemLimitFormat' => $memory_limit_format,
412 'MemUsage' => $memory_usage,
413 'MemUsageGet' => $get_memory_usage,
414 'MemUsageConvert' => $memory_usage_convert,
415 'MemUsageFormat' => $memory_usage_format,
416 'MemUsageCalc' => round( $memory_usage / $memory_limit * 100, 0 ),
417 ];
418
419 return $wp_mem_data;
420 }
421
422 return 'N/A';
423 }
424
425 /**
426 * Server Memory Usage
427 */
428 public function get_server_memory_usage() {
429
430 // Get Server Memory Limit
431 $get_memory_limit = @ini_get( 'memory_limit' );
432 $memory_limit_convert = $this->convert_memory_size( $get_memory_limit );
433 $memory_limit_format = size_format( $memory_limit_convert );
434 $memory_limit = $memory_limit_convert;
435
436 // Get Real Memory Usage
437 $get_memory_usage = $this->get_real_memory_usage();
438 $memory_usage_convert = round( $get_memory_usage / 1024 / 1024 );
439 $memory_usage_format = $memory_usage_convert . ' MB';
440 $memory_usage = $get_memory_usage;
441
442 if ( $get_memory_usage != false && $get_memory_limit != false ) {
443
444 // check memory limit is a numeric value
445 if ( ! is_numeric( $memory_limit ) ) {
446 $memory_limit = 999;
447 }
448
449 $php_mem_data = [
450 'MemLimit' => $memory_limit,
451 'MemLimitGet' => $get_memory_limit,
452 'MemLimitConvert' => $memory_limit_convert,
453 'MemLimitFormat' => $memory_limit_format,
454 'MemUsage' => $memory_usage,
455 'MemUsageGet' => $get_memory_usage,
456 'MemUsageConvert' => $memory_usage_convert,
457 'MemUsageFormat' => $memory_usage_format,
458 'MemUsageCalc' => round( $memory_usage / $memory_limit * 100, 0 ),
459 ];
460
461 return $php_mem_data;
462 }
463
464 return 'N/A';
465 }
466
467
468 public static function wp_memory_usage_percentage() {
469 $memory_usage = ( new ServerInfo() )->get_wp_memory_usage();
470 $memory_usage_percentage = $memory_usage['MemUsageCalc'];
471 return $memory_usage_percentage;
472 }
473
474
475
476
477 /**
478 * Get Server Disk Size
479 */
480
481 public function get_server_disk_size( $path = '/' ) {
482 $os = '';
483 if ( defined( 'PHP_OS' ) ) {
484 $os = PHP_OS;
485 }
486
487 // Linux server
488 if ( $os == 'Linux' ) {
489 $result = [];
490 $result['size'] = 0;
491 $result['free'] = 0;
492 $result['used'] = 0;
493
494 $lines = null;
495 exec( sprintf( 'df /P %s', $path ), $lines );
496
497 foreach ( $lines as $index => $line ) {
498 if ( $index != 1 ) {
499 continue;
500 }
501 $values = preg_split( '/\s{1,}/', $line );
502 $result['size'] = round( $values[1] / 1024 / 1024, 2 );
503 $result['free'] = round( $values[3] / 1024 / 1024, 2 );
504 $result['used'] = round( $values[2] / 1024 / 1024, 2 );
505 $result['usage'] = round( $result['used'] / $result['size'] * 100, 2 );
506 break;
507 }
508
509 return $result;
510 }
511
512 return 'N/A';
513 }
514
515
516
517
518 /**
519 * CPU Load Average
520 *
521 * @return void
522 */
523
524 public function get_cpu_load_average() {
525 $load = 'N/A';
526
527 // Check via PHP function
528 $avg = function_exists( 'sys_getloadavg' ) ? sys_getloadavg() : false;
529 if ( ! empty( $avg ) && is_array( $avg ) && 3 == count( $avg ) ) {
530 $load = implode( ', ', $avg );
531 }
532
533 return $load;
534 }
535
536 /**
537 * Get IP Address
538 *
539 * @return void
540 */
541 public function get_ip_address() {
542 // Get ip address
543
544 $ip_address = isset( $_SERVER['SERVER_ADDR'] ) ? sanitize_text_field( wp_unslash( $_SERVER['SERVER_ADDR'] ) ) : '';
545 if ( ! $ip_address ) {
546 $ip_address = isset( $_SERVER['LOCAL_ADDR'] ) ? sanitize_text_field( wp_unslash( $_SERVER['LOCAL_ADDR'] ) ) : '';
547 }
548 return $ip_address;
549 }
550
551 /**
552 * Get WordPress Version
553 *
554 * @return void
555 */
556 public function get_wp_version() {
557 global $wp_version;
558 return $wp_version;
559 }
560
561 public function check_limit() {
562 $memory_limit = ini_get( 'memory_limit' );
563 if ( preg_match( '/^(\d+)(.)$/', $memory_limit, $matches ) ) {
564 if ( $matches[2] == 'G' ) {
565 $memory_limit = $matches[1] . ' ' . 'GB'; // nnnG -> nnn GB
566 } elseif ( $matches[2] == 'M' ) {
567 $memory_limit = $matches[1] . ' ' . 'MB'; // nnnM -> nnn MB
568 } elseif ( $matches[2] == 'K' ) {
569 $memory_limit = $matches[1] . ' ' . 'KB'; // nnnK -> nnn KB
570 } elseif ( $matches[2] == 'T' ) {
571 $memory_limit = $matches[1] . ' ' . 'TB'; // nnnT -> nnn TB
572 } elseif ( $matches[2] == 'P' ) {
573 $memory_limit = $matches[1] . ' ' . 'PB'; // nnnP -> nnn PB
574 }
575 }
576 return $memory_limit;
577 }
578
579 public function format_filesize( $bytes ) {
580 if ( ( $bytes / pow( 1024, 5 ) ) > 1 ) {
581 return number_format_i18n( ( $bytes / pow( 1024, 5 ) ), 0 ) . ' ' . __( 'PB', 'adminify' );
582 } elseif ( ( $bytes / pow( 1024, 4 ) ) > 1 ) {
583 return number_format_i18n( ( $bytes / pow( 1024, 4 ) ), 0 ) . ' ' . __( 'TB', 'adminify' );
584 } elseif ( ( $bytes / pow( 1024, 3 ) ) > 1 ) {
585 return number_format_i18n( ( $bytes / pow( 1024, 3 ) ), 0 ) . ' ' . __( 'GB', 'adminify' );
586 } elseif ( ( $bytes / pow( 1024, 2 ) ) > 1 ) {
587 return number_format_i18n( ( $bytes / pow( 1024, 2 ) ), 0 ) . ' ' . __( 'MB', 'adminify' );
588 } elseif ( $bytes / 1024 > 1 ) {
589 return number_format_i18n( $bytes / 1024, 0 ) . ' ' . __( 'KB', 'adminify' );
590 } elseif ( $bytes >= 0 ) {
591 return number_format_i18n( $bytes, 0 ) . ' ' . __( 'bytes', 'adminify' );
592 } else {
593 return __( 'Unknown', 'adminify' );
594 }
595 }
596
597 public function format_filesize_kB( $kiloBytes ) {
598 if ( ( $kiloBytes / pow( 1024, 4 ) ) > 1 ) {
599 return number_format_i18n( ( $kiloBytes / pow( 1024, 4 ) ), 0 ) . ' ' . __( 'PB', 'adminify' );
600 } elseif ( ( $kiloBytes / pow( 1024, 3 ) ) > 1 ) {
601 return number_format_i18n( ( $kiloBytes / pow( 1024, 3 ) ), 0 ) . ' ' . __( 'TB', 'adminify' );
602 } elseif ( ( $kiloBytes / pow( 1024, 2 ) ) > 1 ) {
603 return number_format_i18n( ( $kiloBytes / pow( 1024, 2 ) ), 0 ) . ' ' . __( 'GB', 'adminify' );
604 } elseif ( ( $kiloBytes / 1024 ) > 1 ) {
605 return number_format_i18n( $kiloBytes / 1024, 0 ) . ' ' . __( 'MB', 'adminify' );
606 } elseif ( $kiloBytes >= 0 ) {
607 return number_format_i18n( $kiloBytes / 1, 0 ) . ' ' . __( 'KB', 'adminify' );
608 } else {
609 return __( 'Unknown', 'adminify' );
610 }
611 }
612
613 public function format_php_size( $size ) {
614 if ( ! is_numeric( $size ) ) {
615 if ( strpos( $size, 'M' ) !== false ) {
616 $size = intval( $size ) * 1024 * 1024;
617 } elseif ( strpos( $size, 'K' ) !== false ) {
618 $size = intval( $size ) * 1024;
619 } elseif ( strpos( $size, 'G' ) !== false ) {
620 $size = intval( $size ) * 1024 * 1024 * 1024;
621 }
622 }
623 return is_numeric( $size ) ? $this->format_filesize( $size ) : $size;
624 }
625 }
626