aboutsummaryrefslogtreecommitdiff
path: root/srcs/phpmyadmin/libraries/classes/SysInfo.php
diff options
context:
space:
mode:
Diffstat (limited to 'srcs/phpmyadmin/libraries/classes/SysInfo.php')
-rw-r--r--srcs/phpmyadmin/libraries/classes/SysInfo.php73
1 files changed, 73 insertions, 0 deletions
diff --git a/srcs/phpmyadmin/libraries/classes/SysInfo.php b/srcs/phpmyadmin/libraries/classes/SysInfo.php
new file mode 100644
index 0000000..8fae3a8
--- /dev/null
+++ b/srcs/phpmyadmin/libraries/classes/SysInfo.php
@@ -0,0 +1,73 @@
+<?php
+/* vim: set expandtab sw=4 ts=4 sts=4: */
+/**
+ * Library for extracting information about system memory and cpu.
+ * Currently supports all Windows and Linux platforms
+ *
+ * This code is based on the OS Classes from the phpsysinfo project
+ * (https://phpsysinfo.github.io/phpsysinfo/)
+ *
+ * @package PhpMyAdmin-sysinfo
+ */
+declare(strict_types=1);
+
+namespace PhpMyAdmin;
+
+use PhpMyAdmin\SysInfoBase;
+
+/**
+ * PhpMyAdmin\SysInfo class
+ *
+ * @package PhpMyAdmin
+ */
+class SysInfo
+{
+ public const MEMORY_REGEXP = '/^(MemTotal|MemFree|Cached|Buffers|SwapCached|SwapTotal|SwapFree):\s+(.*)\s*kB/im';
+
+ /**
+ * Returns OS type used for sysinfo class
+ *
+ * @param string $php_os PHP_OS constant
+ *
+ * @return string
+ */
+ public static function getOs($php_os = PHP_OS)
+ {
+ // look for common UNIX-like systems
+ $unix_like = [
+ 'FreeBSD',
+ 'DragonFly',
+ ];
+ if (in_array($php_os, $unix_like)) {
+ $php_os = 'Linux';
+ }
+
+ return ucfirst($php_os);
+ }
+
+ /**
+ * Gets sysinfo class mathing current OS
+ *
+ * @return SysInfoBase sysinfo class
+ */
+ public static function get()
+ {
+ $php_os = self::getOs();
+ $supported = [
+ 'Linux',
+ 'WINNT',
+ 'SunOS',
+ ];
+
+ if (in_array($php_os, $supported)) {
+ $class_name = 'PhpMyAdmin\SysInfo' . $php_os;
+ /** @var SysInfoBase $ret */
+ $ret = new $class_name();
+ if ($ret->supported()) {
+ return $ret;
+ }
+ }
+
+ return new SysInfoBase();
+ }
+}