diff --git a/admin/maintenance_env.php b/admin/maintenance_env.php index 2fd4a7440..b09da7450 100644 --- a/admin/maintenance_env.php +++ b/admin/maintenance_env.php @@ -288,7 +288,7 @@ $template->assign( 'PHPWG_URL' => PHPWG_URL, 'PWG_VERSION' => PHPWG_VERSION, 'U_CHECK_UPGRADE' => sprintf($url_format, 'check_upgrade'), - 'OS' => PHP_OS, + 'OS' => PHP_OS.((is_in_container()) ? " (container)" : ""), 'PHP_VERSION' => phpversion(), 'DB_ENGINE' => 'MySQL', 'DB_VERSION' => $db_version, diff --git a/include/functions.inc.php b/include/functions.inc.php index b564be15a..ee0832343 100644 --- a/include/functions.inc.php +++ b/include/functions.inc.php @@ -2496,7 +2496,7 @@ function send_piwigo_infos() 'technical' => array( 'php_version' => PHP_VERSION, 'piwigo_version' => PHPWG_VERSION, - 'os_version' => PHP_OS, + 'os_version' => PHP_OS.((is_in_container()) ? " (container)" : ""), 'db_version' => pwg_get_db_version(), 'php_datetime' => date("Y-m-d H:i:s"), 'db_datetime' => $db_current_date, @@ -2911,4 +2911,42 @@ function pwg_unique_exec_ends($token_name) conf_delete_param($token_name.'_running'); } -?> +/** + * + * Detect if Piwigo is running in a containerized environment + * Assume all containers are Linux based + * Doesn't differentiate between VMs and bare metal installs + * + * @since 16 + * + * @return bool + */ +function is_in_container() +{ + if (strtoupper(substr(PHP_OS, 0, 5)) === 'LINUX') + { + if (file_exists('/proc/2/sched')) // Check if PID2 exist + { + $line = file_get_contents('/proc/2/sched'); // Read PID2 name + if (false == $line ) + { + return false; + } + else + { + // If PID2 name is not kthreadd, piwigo is running in a container + return !('kthreadd' === substr( $line, 0, 8 )); + } + } + else + { + return true; + } + } + else + { + return false; + } +} + +?> \ No newline at end of file