Php uname: примеры (PHP)

Полное руководство по работе с 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_OS_FAMILY возвращает семейство операционных систем в более общем виде. Доступна с PHP 7.2. Возможные значения: Windows, BSD, Linux, macOS, Solaris.

<?
echo PHP_OS_FAMILY;
?>
Linux
Функция php_sapi_name

Функция php_sapi_name() определяет тип интерфейса между PHP и веб-сервером. Полезна для определения контекста выполнения (CLI, Apache, FPM).

Функция getenv

Функция 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 8.0.0

Функция перестала зависеть от настроек локали. Теперь php_uname() всегда возвращает строку в кодировке ASCII, независимо от текущей локали. Это улучшение повысило надежность работы функции в различных окружениях.

Исторические изменения

До PHP 4.3 функция могла возвращать информацию в кодировке, зависящей от текущей локали, что иногда приводило к проблемам с отображением.

Расширенные примеры

Определение типа операционной системы
Пример php
<?
$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
Логирование системной информации
Пример php
<?
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 "Информация записана в лог";
?>
Проверка архитектуры для оптимизации
Пример php
<?
$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-битная система, можно использовать больше памяти
Сборка идентификатора системы
Пример php
<?
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)
Условная компиляция для разных ОС
Пример php
<?
$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')
JavaScript (Node.js)

Модуль 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
Bash/Shell

Команда uname предоставляет аналогичную функциональность:

uname -a
Linux server1 5.4.0-91-generic #102-Ubuntu SMP x86_64 GNU/Linux

PHP php_uname function comments

En
Php uname Returns information about the operating system PHP is running on