Php операционная система сервера

Как получить ОС, на которой работает PHP?

Для создания уникального unix/dos script мне нужно знать, на какой операционной системе я нахожусь. Как получить эту информацию? phpinfo(); говорит мне намного больше и не очень ясно, работает ли я в unix или нет.

8 ответов

PHP имеет много предопределенных констант, которые часто бывают полезны. Здесь PHP_OS — это тот, который вы ищете.
Например, на моей текущей машине этот код:

У вас есть примеры и сравнения с тем, что функция php_uname может получить вас на странице php_uname ; например (цитирование):

За именем только действующего системы, рассмотрите возможность использования PHP_OS постоянный, но помните об этом константа будет содержать система PHP была построена включена.

Как мог PHP_OS когда-либо «работать довольно хорошо», если он дает вам ОС, на которой был построен PHP? Это должно сломаться рано или поздно.

Просто имейте в виду, что PHP_OS фактически содержит платформу, на которой был построен PHP. Это может быть не та самая платформа, на которой она развернута. Поэтому php_uname(‘s’) более надежна.

php_uname(‘s’) в Windows 7 возвращает «Windows NT», поэтому я не знаю, насколько она более надежна 🙂 Я думаю, можно утверждать, что Win 7 основана на NT, но все же .

Windows 7 абсолютно Windows NT (версия 6.1). Vista была Windows NT 6, XP была NT 5.1, 2000 была NT 5. Так что да, это надежно! Проверьте здесь для справки. Введите ver в командной строке, чтобы увидеть номер версии вашей ОС Win.

Читайте также:  Php search in file content

Это похоже на правильный ответ для меня. Принятый ответ категорически неверен и не отвечает на вопрос ОП.

Не могли бы вы уточнить, для чего «Операционная система PHP была построена». средства? (описание PHP_OS на php.net/manual/en/reserved.constants.php ) Это похоже на ОС, в которой был скомпилирован интерпретатор PHP? Как это можно использовать на другой ОС? (это возможно для аналогичных систем Unix? для разных версий одной и той же ОС?)

@YakovL YakovL формулировка, которую вы упоминаете, не в моем ответе. Мой ответ относится к «платформе, на которой был построен PHP» и «платформе, на которой он [PHP] развернут». Хотя это очень редко другая операционная система, обычно это другая машина, и технически возможно выполнять кросс-компиляцию для других платформ. Чтобы было ясно, важно понимать, что PHP_OS является скомпилированной константой, относящейся к самой сборке PHP и не имеющей ничего общего с хост-сервером. php_uname () — это функция времени выполнения, которая возвращает информацию о хост-сервере.

Я понимаю, я просто подумал, что вы можете знать некоторые конкретные примеры, когда разница имеет место

Как и в PHP 7.2.0, у нас есть новая предопределенная константа для получения семейства операционной системы, то есть PHP_OS_FAMILY. Он возвращает строку Либо «Windows», «BSD», «OSX», «Solaris», «Linux» или «Unknown».

Есть два разных способа проверить платформу, на которой работает ваш PHP.

  • Используя PHP_OS , который является константой, и укажет на имя системы «, в котором был встроен ваш PHP.
  • Использование встроенной функции PHP php_uname() , которая расскажет вам больше о платформе (название операционной системы, имя хоста, версия информация, название релиза, тип машины), на котором запущен ваш script на нем.

PHP Не предоставляет никакой функции для получения имени дистрибутива, php_uname похож на команду Linux uname , это означает, что он не предоставляет никакой информации о самом дистрибутиве.

Ни php_uname , ни PHP_OS не указывается. о распределении, но тип ОС (например, Linux/Windows).

Я думаю, что лучший способ узнать, что OS/дистрибутив работает, чтобы читать /etc/os-release , хорошо, что этот файл имеет разрешение на чтение для всех пользователей, а плохое — это может не работать на общем хостинге.

Здесь я написал очень простую PHP-функцию, которая читает и преобразует os-release в массив:

 function getOSInformation() < if (false == function_exists("shell_exec") || false == is_readable("/etc/os-release")) < return null; >$os = shell_exec('cat /etc/os-release'); $listIds = preg_match_all('/.*=/', $os, $matchListIds); $listIds = $matchListIds[0]; $listVal = preg_match_all('/=.*/', $os, $matchListVal); $listVal = $matchListVal[0]; array_walk($listIds, function(&$v, $k)< $v = strtolower(str_replace('=', '', $v)); >); array_walk($listVal, function(&$v, $k)< $v = preg_replace('/=|"/', '', $v); >); return array_combine($listIds, $listVal); > 

Эта функция печатает что-то вроде этого:

Array ( [name] => Ubuntu [version] => 16.04.2 LTS (Xenial Xerus) [id] => ubuntu [id_like] => debian [pretty_name] => Ubuntu 16.04.2 LTS [version_id] => 16.04 [home_url] => http://www.ubuntu.com/ [support_url] => http://help.ubuntu.com/ [bug_report_url] => http://bugs.launchpad.net/ubuntu/ [version_codename] => xenial [ubuntu_codename] => xenial ) 
[1] Датская фраза означает удачу.

Источник

php_uname

php_uname() returns a description of the operating system PHP is running on. This is the same string you see at the very top of the phpinfo() output. For the name of just the operating system, consider using the PHP_OS constant, but keep in mind this constant will contain the operating system PHP was built on.

On some older UNIX platforms, it may not be able to determine the current OS information in which case it will revert to displaying the OS PHP was built on. This will only happen if your uname() library call either doesn’t exist or doesn’t work.

Parameters

  • ‘a’ : This is the default. Contains all modes in the sequence «s n r v m» .
  • ‘s’ : Operating system name. eg. FreeBSD .
  • ‘n’ : Host name. eg. localhost.example.com .
  • ‘r’ : Release name. eg. 5.1.2-RELEASE .
  • ‘v’ : Version information. Varies a lot between operating systems.
  • ‘m’ : Machine type. eg. i386 .

Return Values

Returns the description, as a string.

Examples

Example #1 Some php_uname() examples

/* Some possible outputs:
Linux localhost 2.4.21-0.13mdk #1 Fri Mar 14 15:08:06 EST 2003 i686
Linux

FreeBSD localhost 3.2-RELEASE #15: Mon Dec 17 08:46:02 GMT 2001
FreeBSD

Windows NT XN1 5.1 build 2600
WINNT
*/

if ( strtoupper ( substr ( PHP_OS , 0 , 3 )) === ‘WIN’ ) echo ‘This is a server using Windows!’ ;
> else echo ‘This is a server not using Windows!’ ;
>

There are also some related Predefined PHP constants that may come in handy, for example:

Example #2 A few OS related constant examples

// *nix
echo DIRECTORY_SEPARATOR ; // /
echo PHP_SHLIB_SUFFIX ; // so
echo PATH_SEPARATOR ; // :

// Win*
echo DIRECTORY_SEPARATOR ; // \
echo PHP_SHLIB_SUFFIX ; // dll
echo PATH_SEPARATOR ; // ;
?>

See Also

  • phpversion() — Gets the current PHP version
  • php_sapi_name() — Returns the type of interface between web server and PHP
  • phpinfo() — Outputs information about PHP’s configuration

User Contributed Notes 4 notes

Although it does not indicate receiving parameters this function allows some chars as parameters, they are the options a; m; n; r; s; v.

I don’t know exactly what each one does, but below is a code example and its output on PHP 5.5 running on RedHat 4.4

echo » ;
echo ‘(void): ‘ . php_uname (). «\n» ; // output: «(void): Linux web989.uni5.net 4.4.180 #1 SMP Wed May 22 15:27:37 -03 2019 x86_64»
echo ‘a: ‘ . php_uname ( ‘a’ ). «\n» ; // output: «a: Linux web989.uni5.net 4.4.180 #1 SMP Wed May 22 15:27:37 -03 2019 x86_64»
echo ‘m: ‘ . php_uname ( ‘m’ ). «\n» ; // output: «m: x86_64»
echo ‘n: ‘ . php_uname ( ‘n’ ). «\n» ; // output: «n: web989.uni5.net»
echo ‘r: ‘ . php_uname ( ‘r’ ). «\n» ; // output: «r: 4.4.180»
echo ‘s: ‘ . php_uname ( ‘s’ ). «\n» ; // output: «s: Linux»
echo ‘v: ‘ . php_uname ( ‘v’ ). «\n» ; // output: «v: #1 SMP Wed May 22 15:27:37 -03 2019»
// echo file_get_contents(‘/etc/issue’).»\n»;

echo ‘‘ ;
phpinfo ();
?>

Note that I used file_get_contentes with a file, that file is present in most linux boxies and varies on content, but most of times it indicates kernel version, linux version, distribution and so on. In my case my user didn’t have access to the file, so to identify that it was a red hat I paid attention to php_info outputs, there in the middle was the postgress driver description, p. eg indicating the distribution.

I guess there is no easy way to find out the server version programmatically a 100% of times, but by and large you can get around by yourself.

Note that php_uname(‘n’) does not always equal $_SERVER[‘HOST_NAME’]

The machine that you are running the script may server many different host names so don’t use this when building urls.

  • PHP Options/Info Functions
    • assert_​options
    • assert
    • cli_​get_​process_​title
    • cli_​set_​process_​title
    • dl
    • extension_​loaded
    • gc_​collect_​cycles
    • gc_​disable
    • gc_​enable
    • gc_​enabled
    • gc_​mem_​caches
    • gc_​status
    • get_​cfg_​var
    • get_​current_​user
    • get_​defined_​constants
    • get_​extension_​funcs
    • get_​include_​path
    • get_​included_​files
    • get_​loaded_​extensions
    • get_​required_​files
    • get_​resources
    • getenv
    • getlastmod
    • getmygid
    • getmyinode
    • getmypid
    • getmyuid
    • getopt
    • getrusage
    • ini_​alter
    • ini_​get_​all
    • ini_​get
    • ini_​parse_​quantity
    • ini_​restore
    • ini_​set
    • memory_​get_​peak_​usage
    • memory_​get_​usage
    • memory_​reset_​peak_​usage
    • php_​ini_​loaded_​file
    • php_​ini_​scanned_​files
    • php_​sapi_​name
    • php_​uname
    • phpcredits
    • phpinfo
    • phpversion
    • putenv
    • set_​include_​path
    • set_​time_​limit
    • sys_​get_​temp_​dir
    • version_​compare
    • zend_​thread_​id
    • zend_​version
    • get_​magic_​quotes_​gpc
    • get_​magic_​quotes_​runtime
    • restore_​include_​path

    Источник

    php_uname

    php_uname() возвращает описание операционной системы, на которой запущен PHP. Это та же строка, с которой начинается вывод phpinfo() . Для вывода названия операционной системы используется константа PHP_OS . Обратите внимание, что эта константа содержит название операционной системы, на которой PHP был собран (built).

    На некоторых старых UNIX платформах получить информацию о текущей ОС может оказаться невозможным. В таких случаях функция выдаст название ОС, на которой PHP был собран. Такое случается, когда библиотека, которой пользуется uname(), недоступна или работает некорректно.

    Список параметров

    • ‘a’: По умолчанию. Содержит все режимы в следующей последовательности «s n r v m».
    • ‘s’: Название операционной системы. Например, FreeBSD.
    • ‘n’: Имя хоста, например, localhost.example.com.
    • ‘r’: Номер релиза. Например, 5.1.2-RELEASE.
    • ‘v’: Информация о версии. Может сильно различаться в разных ОС.
    • ‘m’: Архитектура процессора. Например, i386.

    Возвращаемые значения

    Возвращает описание ОС в виде строки.

    Примеры

    Пример #1 Несколько примеров использования php_uname()

    /* Разные варианты:
    Linux localhost 2.4.21-0.13mdk #1 Fri Mar 14 15:08:06 EST 2003 i686
    Linux

    FreeBSD localhost 3.2-RELEASE #15: Mon Dec 17 08:46:02 GMT 2001
    FreeBSD

    Windows NT XN1 5.1 build 2600
    WINNT
    */

    if ( strtoupper ( substr ( PHP_OS , 0 , 3 )) === ‘WIN’ ) echo ‘Сервер работает под управлением Windows!’ ;
    > else echo ‘Сервер работает под управлением ОС, отличной от Windows!’ ;
    >

    Ниже приведено несколько Предопределенных PHP констант, которые могут оказаться полезными:

    Пример #2 Некоторые OS константы

    // *nix
    echo DIRECTORY_SEPARATOR ; // /
    echo PHP_SHLIB_SUFFIX ; // so
    echo PATH_SEPARATOR ; // :

    // Win*
    echo DIRECTORY_SEPARATOR ; // \
    echo PHP_SHLIB_SUFFIX ; // dll
    echo PATH_SEPARATOR ; // ;
    ?>

    Смотрите также

    • phpversion() — Выдает текущую версию PHP
    • php_sapi_name() — Возвращает тип интерфейса между веб-сервером и PHP
    • phpinfo() — Выводит информацию о текущей конфигурации PHP

    Источник

Оцените статью