Php uname: примеры (PHP)
php_uname(string $mode = "a"): stringФункция php_uname в PHP
Функция php_uname() возвращает информацию об операционной системе, на которой выполняется интерпретатор PHP. Эта функция часто применяется для диагностики, логирования или условного выполнения кода в зависимости от операционной среды.
Функция принимает один необязательный параметр $mode, который определяет тип возвращаемой информации:
- 'a' (по умолчанию) - возвращает все данные в строке формата "s n r v m"
- 's' - имя операционной системы (например, Linux, Windows NT)
- 'n' - имя хоста (сетевое имя компьютера)
- 'r' - номер выпуска ОС (версия ядра)
- 'v' - информация о версии ОС
- 'm' - архитектура процессора (например, x86_64)
Примеры использования php_uname
Вызов функции без параметров:
<?
echo php_uname();
?>Linux server1 5.4.0-91-generic #102-Ubuntu SMP Fri Nov 5 16:31:28 UTC 2021 x86_64
Использование разных режимов:
<?
echo "OS: " . php_uname('s') . "\n";
echo "Host: " . php_uname('n') . "\n";
echo "Release: " . php_uname('r') . "\n";
echo "Version: " . php_uname('v') . "\n";
echo "Arch: " . php_uname('m') . "\n";
?>OS: Linux Host: server1 Release: 5.4.0-91-generic Version: #102-Ubuntu SMP Fri Nov 5 16:31:28 UTC 2021 Arch: x86_64
Похожие функции в PHP
Константа PHP_OS_FAMILY возвращает семейство операционных систем в более общем виде. Доступна с PHP 7.2. Возможные значения: Windows, BSD, Linux, macOS, Solaris.
<?
echo PHP_OS_FAMILY;
?>Linux
Функция php_sapi_name() определяет тип интерфейса между PHP и веб-сервером. Полезна для определения контекста выполнения (CLI, Apache, FPM).
Функция getenv() позволяет получать переменные окружения, которые могут содержать информацию об операционной системе.
Типичные ошибки
Использование недопустимого значения параметра mode:
<?
// Неправильное значение параметра
$result = php_uname('x');
echo $result;
?>Linux server1 5.4.0-91-generic #102-Ubuntu SMP Fri Nov 5 16:31:28 UTC 2021 x86_64
Функция игнорирует неверный параметр и возвращает полную информацию.
В ранних версиях PHP могли возникать проблемы с кодировкой вывода:
<?
// PHP 5.x: потенциальные проблемы с locale
setlocale(LC_ALL, 'ru_RU.UTF-8');
echo php_uname('n');
?>В PHP 8 эта проблема решена - вывод всегда в ASCII.
Изменения в версиях PHP
Функция перестала зависеть от настроек локали. Теперь php_uname() всегда возвращает строку в кодировке ASCII, независимо от текущей локали. Это улучшение повысило надежность работы функции в различных окружениях.
До PHP 4.3 функция могла возвращать информацию в кодировке, зависящей от текущей локали, что иногда приводило к проблемам с отображением.
Расширенные примеры
<?
$os = php_uname('s');
if (stripos($os, 'Windows') !== false) {
echo "Запущено на Windows\n";
// Windows-специфичный код
} elseif (stripos($os, 'Linux') !== false) {
echo "Запущено на Linux\n";
// Linux-специфичный код
} elseif (stripos($os, 'Darwin') !== false) {
echo "Запущено на macOS\n";
// macOS-специфичный код
}
?>Запущено на Linux
<?
function log_system_info() {
$info = [
'os' => php_uname('s'),
'host' => php_uname('n'),
'kernel' => php_uname('r'),
'arch' => php_uname('m'),
'php_version' => PHP_VERSION,
'timestamp' => date('Y-m-d H:i:s')
];
file_put_contents('system_log.json',
json_encode($info, JSON_PRETTY_PRINT));
}
log_system_info();
echo "Информация записана в лог";
?><?
$arch = php_uname('m');
if ($arch === 'x86_64' || $arch === 'amd64') {
echo "64-битная система, можно использовать больше памяти\n";
$memory_limit = '2G';
} elseif ($arch === 'i386' || $arch === 'i686') {
echo "32-битная система, ограничения памяти\n";
$memory_limit = '512M';
} else {
echo "Архитектура: $arch\n";
}
?>64-битная система, можно использовать больше памяти
<?
function get_system_fingerprint() {
$components = [
php_uname('s'),
php_uname('r'),
php_uname('m'),
php_uname('n')
];
return hash('sha256', implode('|', $components));
}
echo "System fingerprint: " . get_system_fingerprint();
?>System fingerprint: a1b2c3d4e5f67890... (хэш SHA256)
<?
$os_type = strtolower(php_uname('s'));
switch (true) {
case strpos($os_type, 'win') !== false:
$config_path = 'C:\\ProgramData\\app\\config.ini';
$temp_dir = getenv('TEMP');
break;
case strpos($os_type, 'linux') !== false:
$config_path = '/etc/app/config.ini';
$temp_dir = '/tmp';
break;
case strpos($os_type, 'darwin') !== false:
$config_path = '/Library/Application Support/app/config.ini';
$temp_dir = '/tmp';
break;
default:
$config_path = './config.ini';
$temp_dir = sys_get_temp_dir();
}
echo "Config path: $config_path\n";
?>Аналоги в других языках
Php uname в Python
Модуль platform предоставляет функцию uname(), аналогичную php_uname:
import platform
print(platform.uname())uname_result(system='Linux', node='server1', release='5.4.0', version='#102-Ubuntu', machine='x86_64')
Модуль os предоставляет методы для получения информации об ОС:
const os = require('os');
console.log(os.type());
console.log(os.hostname());
console.log(os.release());
console.log(os.arch());Linux server1 5.4.0-91-generic x86_64
Команда uname предоставляет аналогичную функциональность:
uname -aLinux server1 5.4.0-91-generic #102-Ubuntu SMP x86_64 GNU/Linux