web-dev-qa-db-ja.com

PHPが実行されているOSを取得する方法は?

UNIX/DOS固有のスクリプトを作成するには、自分がどの種類のオペレーティングシステムであるかを知る必要があります。

この情報を取得するにはどうすればよいですか?
phpinfo();は、Unixで実行しているかどうかを非常に明確に示しています。

49
Martin Klepsch

PHPには多くの 事前定義された定数 があり、これはしばしば有用です。

ここで、PHP_OSは探しているものです。


たとえば、現在のマシンでは、このコードは次のとおりです。

var_dump(PHP_OS);

与える:

string 'Linux' (length=5)


いくつかの例と、php_uname関数は php_uname ;例えば(quoting)

<?php
echo php_uname();
echo PHP_OS;

/* 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!';
}

そのページには次のようにも書かれています。

オペレーティングシステムのみの名前については、PHP_OS定数ですが、この定数にはオペレーティングシステムが含まれていることに注意してくださいPHP wasbuilton)。

93
Pascal MARTIN

_PHP_OS_には実際にPHPが構築されたプラットフォームが含まれます。これはデプロイされたプラットフォームとは異なる場合があります。したがってphp_uname('s')の方が信頼性があります。

31
spikyjt

PHP 7.2.の時点で、オペレーティングシステムファミリを取得するための新しい事前定義済み定数、つまりPHP_OS_FAMILYがあります。 string「Windows」、「BSD」、「OSX」、「Solaris」、「Linux」または「不明」のいずれかを返します。

8
shery089

PHP_OSは、ホストos名で定義されます: http://us2.php.net/manual/en/reserved.constants.php

3
jmucchiello

PHPが実行されているプラ​​ットフォームを確認するには、2つの異なる方法があります。

  1. _PHP_OS_を使用します。これは、constであり、PHPが組み込まれた 'オペレーティングシステム名'を指します。
  2. PHP組み込み関数php_uname()_を使用すると、スクリプトが実行されているプラ​​ットフォーム(オペレーティングシステム名、ホスト名、バージョン情報、リリース名、マシンタイプ)の詳細がわかります。その上。
2
M.J.Ahmadi

PHPは、ディストリビューションの名前を取得する関数php_unameはLinuxコマンドunameに似ていますが、ディストリビューション自体に関する情報は提供しません。

php_uname nor PHP_OS十分な情報を提供します。ディストリビューションについてですが、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
)

Og lykke [1]を開催;-)

[1]デンマーク語のフレーズは幸運を意味します。

2
Ahmad

Php 7.2.0では、PHP_OS_FAMILY定数を使用できます。

他のPHP使用できるバージョン:

/**
* return DOS OR UNIX
*/
function familyOS() {
   return (stripos(PHP_OS, "WIN") === 0)? "DOS" : "UNIX";
}
1
fitorec
#!/usr/bin/env php
<?php
$platform = DIRECTORY_SEPARATOR === '\\'
    ? 'Windows'
    : 'Unix/Linux';

これはあまりきめ細かいものではないことは承知していますが、Winシステムと* nixシステム間の単純な認識には十分かもしれません。 YMMV

0
helvete