From 09efce040a0f1143571cf544b31610da54e1b1c3 Mon Sep 17 00:00:00 2001 From: Fan2Shrek Date: Tue, 17 Sep 2024 20:53:09 +0200 Subject: [PATCH] Add Docker Support --- CHANGELOG.md | 1 + README.md | 1 + src/OsHelper.php | 7 ++++++- tests/OsHelperTest.php | 7 +++++++ 4 files changed, 15 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e23386d..c3c5081 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ ## Not released yet * Remove mb_string extension requirement +* Add Docker support ## 0.1.0 (2023-12-03) diff --git a/README.md b/README.md index 240ada1..9ac90b0 100644 --- a/README.md +++ b/README.md @@ -21,6 +21,7 @@ OsHelper::isWindowsSeven(); // true or false OsHelper::isWindowsEightOrHigher(); // true or false OsHelper::isWindowsSubsystemForLinux(); // true or false OsHelper::isMacOs(); // true or false +OsHelper::isDocker(); // true or false OsHelper::getMacOSVersion(); // 10.15.7 ``` diff --git a/src/OsHelper.php b/src/OsHelper.php index ad1a654..2684567 100644 --- a/src/OsHelper.php +++ b/src/OsHelper.php @@ -15,7 +15,7 @@ public static function isUnix(): bool public static function isWindowsSubsystemForLinux(): bool { - return self::isUnix() && str_contains(strtolower(php_uname()), 'microsoft'); + return !self::isDocker() && self::isUnix() && str_contains(strtolower(php_uname()), 'microsoft'); } public static function isWindows(): bool @@ -50,6 +50,11 @@ public static function isMacOS(): bool return str_contains(self::$kernelName, 'Darwin'); } + public static function isDocker(): bool + { + return file_exists('/.dockerenv') || (file_exists('/proc/self/cgroup') && false !== mb_strpos(file_get_contents('/proc/self/cgroup') ?: '', 'docker')); + } + public static function getMacOSVersion(): string { if (!isset(self::$macOSVersion)) { diff --git a/tests/OsHelperTest.php b/tests/OsHelperTest.php index 7680fd1..0074c36 100644 --- a/tests/OsHelperTest.php +++ b/tests/OsHelperTest.php @@ -65,6 +65,13 @@ public function testIsMacOS() $this->assertSame($isDarwin, OsHelper::isMacOS()); } + public function testIsDocker() + { + $isDocker = file_exists('/.dockerenv') || (file_exists('/proc/self/cgroup') && false !== mb_strpos(file_get_contents('/proc/self/cgroup') ?: '', 'docker')); + + $this->assertSame($isDocker, OsHelper::isDocker()); + } + public function testGetMacOSVersion() { if (!OsHelper::isMacOS()) {