public static function sw_operating_system() { if (!PTS_IS_CLIENT) { // TODO: Figure out why this function is sometimes called from OpenBenchmarking.org.... return false; } // Determine the operating system release if (phodevi::is_linux()) { $vendor = phodevi_linux_parser::read_lsb_distributor_id(); if ($vendor == null) { if (is_readable('/etc/os-release')) { $os_release = parse_ini_file('/etc/os-release'); } else { if (is_readable('/usr/lib/os-release')) { $os_release = parse_ini_file('/usr/lib/os-release'); } else { $os_release = null; } } if (isset($os_release['PRETTY_NAME']) && !empty($os_release['PRETTY_NAME'])) { $vendor = $os_release['PRETTY_NAME']; } else { if (isset($os_release['NAME']) && !empty($os_release['NAME'])) { $vendor = $os_release['NAME']; } } } } else { if (phodevi::is_hurd()) { $vendor = php_uname('v'); } else { $vendor = null; } } $version = phodevi::read_property('system', 'os-version'); if (!$vendor) { $os = null; // Try to detect distro for those not supplying lsb_release $files = pts_file_io::glob('/etc/*-version'); for ($i = 0; $i < count($files) && $os == null; $i++) { $file = file_get_contents($files[$i]); if (trim($file) != null) { $os = substr($file, 0, strpos($file, "\n")); } } if ($os == null) { $files = pts_file_io::glob('/etc/*-release'); for ($i = 0; $i < count($files) && $os == null; $i++) { $file = file_get_contents($files[$i]); if (trim($file) != null) { $proposed_os = substr($file, 0, strpos($file, PHP_EOL)); if (strpos($proposed_os, '=') == false) { $os = $proposed_os; } } else { if ($i == count($files) - 1) { $os = ucwords(substr($n = basename($files[$i]), 0, strpos($n, '-'))); } } } } if ($os == null && is_file('/etc/release')) { $file = file_get_contents('/etc/release'); $os = substr($file, 0, strpos($file, "\n")); } if ($os == null && is_file('/etc/palm-build-info')) { // Palm / webOS Support $os = phodevi_parser::parse_equal_delimited_file('/etc/palm-build-info', 'PRODUCT_VERSION_STRING'); } if ($os == null) { if (phodevi::is_windows()) { $os = trim(exec('ver')); } if (is_file('/etc/debian_version')) { $os = 'Debian ' . php_uname('s') . ' ' . ucwords(pts_file_io::file_get_contents('/etc/debian_version')); } else { $os = php_uname('s'); } } else { if (strpos($os, ' ') === false) { // The OS string is only one word, likely a problem... if (is_file('/etc/arch-release') && stripos($os, 'Arch') === false) { // On at least some Arch installs (ARM) the file is empty so would have missed above check $os = trim('Arch Linux ' . $os); } } } } else { if (stripos($vendor, $version) === false) { $os = $vendor . ' ' . $version; } else { $os = $vendor; } } if (($break_point = strpos($os, ':')) > 0) { $os = substr($os, $break_point + 1); } if (phodevi::is_macosx()) { $os = phodevi_osx_parser::read_osx_system_profiler('SPSoftwareDataType', 'SystemVersion'); } if (($break_point = strpos($os, '(')) > 0) { $os = substr($os, 0, $break_point); } $os = trim($os); return $os; }