|
|
@@ -0,0 +1,101 @@
|
|
|
+<?php
|
|
|
+
|
|
|
+namespace phpath;
|
|
|
+
|
|
|
+class system_detector {
|
|
|
+ /**
|
|
|
+ * That class could be used to detect, which standard of operating system
|
|
|
+ * code is running on. POSIX like operating systems, that mean Linux, BSD
|
|
|
+ * MacOS, Solaris, and other *nix use "/" as directory separator and uses
|
|
|
+ * root directory, when Windows and DOS use "\" and drives letters.
|
|
|
+ */
|
|
|
+
|
|
|
+ public static function is_posix(): bool {
|
|
|
+ /**
|
|
|
+ * This function check that system uses POSIX like standards.
|
|
|
+ * When system is POSIX like, that mean Linux, Unix, MacOS and much
|
|
|
+ * more return true. When run on not POSIX system return false.
|
|
|
+ *
|
|
|
+ * @return bool True when system is POSIX like, false when not.
|
|
|
+ */
|
|
|
+ static $is_posix = null;
|
|
|
+
|
|
|
+ if ($is_posix !== null) {
|
|
|
+ return $is_posix;
|
|
|
+ }
|
|
|
+
|
|
|
+ $is_posix = false;
|
|
|
+ $is_posix = $is_posix or self::in_os_name('nix');
|
|
|
+ $is_posix = $is_posix or self::in_os_name('linux');
|
|
|
+ $is_posix = $is_posix or self::in_os_name('mac');
|
|
|
+ $is_posix = $is_posix or self::in_os_name('bsd');
|
|
|
+ $is_posix = $is_posix or self::in_os_name('solaris');
|
|
|
+
|
|
|
+ return $is_posix;
|
|
|
+ }
|
|
|
+
|
|
|
+ public static function is_windows(): bool {
|
|
|
+ /**
|
|
|
+ * It check that code run on windows.
|
|
|
+ * When code run on windows like os, which use "\" as directory
|
|
|
+ * separator, return true. When not run on dos or windows return
|
|
|
+ * false.
|
|
|
+ *
|
|
|
+ * @return bool True when run on windows, or false when on POSIX.
|
|
|
+ */
|
|
|
+
|
|
|
+ static $is_windows = null;
|
|
|
+
|
|
|
+ if ($is_windows !== null) {
|
|
|
+ return $is_windows;
|
|
|
+ }
|
|
|
+
|
|
|
+ $is_windows = false;
|
|
|
+ $is_windows = $is_windows or self::in_os_name('nt');
|
|
|
+ $is_windows = $is_windows or self::in_os_name('win');
|
|
|
+ $is_windows = $is_windows or self::in_os_name('dos');
|
|
|
+
|
|
|
+ return $is_windows;
|
|
|
+ }
|
|
|
+
|
|
|
+ public static function get_os_name(): string {
|
|
|
+ /**
|
|
|
+ * It return simple name of family of system on which code run.
|
|
|
+ *
|
|
|
+ * @return string Name of system family.
|
|
|
+ */
|
|
|
+
|
|
|
+ return strtolower(php_uname('s'));
|
|
|
+ }
|
|
|
+
|
|
|
+ private static function in_os_name(string $part): bool {
|
|
|
+ /**
|
|
|
+ * This function check that given part of name is in the operating
|
|
|
+ * system name or given part is equal to system name.
|
|
|
+ *
|
|
|
+ * @return bool True when it is equal or false when not.
|
|
|
+ */
|
|
|
+
|
|
|
+ static $uname = self::get_os_name();
|
|
|
+
|
|
|
+ if ($uname === $part) {
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (strpos($uname, $part) !== false) {
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ public static function get_separator(): string {
|
|
|
+ /**
|
|
|
+ * That return directory separator.
|
|
|
+ *
|
|
|
+ * @return string Directory separator.
|
|
|
+ */
|
|
|
+
|
|
|
+ return DIRECTORY_SEPARATOR;
|
|
|
+ }
|
|
|
+}
|