web-dev-qa-db-ja.com

PHPスクリプト-LinuxまたはWindowsのどちらで実行されているかを検出しますか?

WindowsシステムまたはLinuxシステムに配置できるPHPスクリプトがあります。どちらの場合でも異なるコマンドを実行する必要があります。

現在の環境を検出するにはどうすればよいですか? (できれば、巧妙なシステムハッキングよりも何かPHP)

更新

明確にするために、スクリプトはコマンドラインから実行しています。

129
siliconpi

PHP_OS定数の値を確認してくださいドキュメント

Windowsでは、WIN32WINNT、またはWindowsなどのさまざまな値が提供されます。

参照: 可能な値:PHP_OS および php_unameドキュメント

if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {
    echo 'This is a server using Windows!';
} else {
    echo 'This is a server not using Windows!';
}
215
Sander Marechal

ディレクトリセパレーターが/(unix/linux/macの場合)またはWindows上の\かどうかを確認できます。定数名はDIRECTORY_SEPARATORです

if (DIRECTORY_SEPARATOR == '/') {
    // unix, linux, mac
}

if (DIRECTORY_SEPARATOR == '\\') {
    // windows
}
55
Ibu
if (strncasecmp(PHP_OS, 'WIN', 3) == 0) {
    echo 'This is a server using Windows!';
} else {
    echo 'This is a server not using Windows!';
}

受け入れられている答えよりも少しエレガントなようです。ただし、前述のDIRECTORY_SEPARATORによる検出は最速です。

37
Ondřej Bouda

PHP_OSは、PHPがbuilton であったOSを報告します。これは、必ずしも同じOSではありません現在実行されていること。

PHP> = 5.3を使用していて、Windowsで実行しているかどうかを知る必要がある場合は、 Windows固有の定数 のいずれかが定義されているかどうかをテストします。良い賭け、例えば:

$windows = defined('PHP_WINDOWS_VERSION_MAJOR');
16
ejn

php_uname 関数を使用してこれを検出できます。

echo php_uname();
8
Anders Lindahl

これはPHP 4.3+で動作するはずです:

if (strtolower(PHP_SHLIB_SUFFIX) === 'dll')
{
    // Windows
}
else
{
    // Linux/UNIX/OS X
}
6
Jonathon Hill

事前定義された定数:ユーザーが投稿したメモ Volkerとrdcapassoソリューションによると、次のようなヘルパークラスを簡単に作成できます。

<?php

class System {

    const OS_UNKNOWN = 1;
    const OS_WIN = 2;
    const OS_LINUX = 3;
    const OS_OSX = 4;

    /**
     * @return int
     */
    static public function getOS() {
        switch (true) {
            case stristr(PHP_OS, 'DAR'): return self::OS_OSX;
            case stristr(PHP_OS, 'WIN'): return self::OS_WIN;
            case stristr(PHP_OS, 'LINUX'): return self::OS_LINUX;
            default : return self::OS_UNKNOWN;
        }
    }

}

使用法:

if(System::getOS() == System::OS_WIN) {
  // do something only on Windows platform
}
5

コア定義済み定数:http://us3.php.net/manual/en/reserved.constants.phpPHP_OS (string)定数。

または、クライアントのOSを検出する場合:

<?php
    echo $_SERVER['HTTP_USER_AGENT'] . "\n\n";

    $browser = get_browser(null, true);
    print_r($browser);
?>

から http://us3.php.net/manual/en/function.get-browser.php


あなたの編集によれば、この二重参照を参照できます コマンドラインからのPHPサーバー名

使用できます

string php_uname ([ string $mode = "a" ] )

そう

php_uname("s")

's':オペレーティングシステム名。例えば。 FreeBSD。

あなたのためにトリックを行うでしょう、ここを参照してください http://php.net/manual/en/function.php-uname.php

4
Artjom Zabelin

Windows、OS X、またはLinuxかどうかを検出するには:

if (stripos(PHP_OS, 'win') === 0) {
    // code for windows
} elseif (stripos(PHP_OS, 'darwin') === 0) {
    // code for OS X
} elseif (stripos(PHP_OS, 'linux') === 0) {
    // code for Linux
}

striposは、この特定のケースではsubstrよりも少し遅くなりますが、そのような小さなタスクには十分に効率的で、よりエレガントです。

3
artnikpro

PHP> 5.3.0に定数が存在するかどうかを確認できます( manual

if (defined('PHP_WINDOWS_VERSION_BUILD')) {
    // is Windows
}

以前は、このメソッドはSymfonyで使用されていました。今、彼らは 異なる方法 を使用しています:

if ('\\' === DIRECTORY_SEPARATOR) {
    // is Windows
}
1
ghost404

Linuxで実行されているかどうかを確認する場合は、(PHP_OS === 'Linux')かどうかをテストします。 strtolower()とsubstr()を使用する必要はありません。

0