回答:
PHP_OS
定数Docsの値を確認します。
それはあなたのようなWindows上でさまざまな値を与えるWIN32
、WINNT
またはWindows
。
以下も参照してください:可能な値:PHP_OSおよびphp_uname
Docs:
if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {
echo 'This is a server using Windows!';
} else {
echo 'This is a server not using Windows!';
}
stripos(PHP_OS, 'WIN') === 0
代わりに、おそらくより読みやすく/簡単に使用できます。
ディレクトリセパレータが/
(unix / linux / macの場合)または\
Windowsにあるかどうかを確認できます。定数名はDIRECTORY_SEPARATOR
です。
if (DIRECTORY_SEPARATOR === '/') {
// unix, linux, mac
}
if (DIRECTORY_SEPARATOR === '\\') {
// windows
}
strpos(__FILE__,92)
同じ振る舞いを利用します。PATH_SEPARATOR>":"
Windowsの場合もtrueを返します(他のすべてのOSではPATH_SEPARATORは ":"です)。
function is_linux(){return (DIRECTORY_SEPARATOR == '/') ? true : false;}
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による検出は最速です。
strncasecmp
は、 任意のn文字ではなく、最初のn文字を取ることに注意してください。試してみると、がに評価されることがわかります。strncasecmp('DARWIN', 'WIN', 3) == 0
false
PHP_OSは、PHPが構築されたOSを報告することに注意してください。これは、現在実行されているOSと同じであるとは限りません。
PHP> = 5.3を使用していて、Windowsで実行しているかどうかを知る必要がある場合は、Windows固有の定数の 1つが定義されているかどうかをテストすることをお勧めします。例:
$windows = defined('PHP_WINDOWS_VERSION_MAJOR');
php_unameの機能は、これを検出するために使用することができます。
echo php_uname();
よると、定義済み定数:ユーザーは、Notes貢献フォルカーさんと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
}
PHP 7.2.0以降では、定数を使用して実行中のOSを検出できますPHP_OS_FAMILY
。
if (PHP_OS_FAMILY === "Windows") {
echo "Running on Windows";
} elseif (PHP_OS_FAMILY === "Linux") {
echo "Running on Linux";
}
可能な値については、公式のPHPドキュメントを参照してください。
コアの定義済み定数: http : //us3.php.net/manual/en/reserved.constants.phpにはPHP_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
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
この特定の場合よりも少し遅いですが、そのような小さなタスクには十分効率的であり、よりエレガントです。
Linuxで実行しているかどうかを確認したい場合は、テストしてください(PHP_OS === 'Linux')
。strtolower()とsubstr()を使用する必要はありません。
http://www.php.net/manual/en/reserved.variables.server.php#102162から:
<?php
echo '<table border="1">';
foreach ($_SERVER as $k => $v){
echo "<tr><td>" . $k ."</td><td>" . $v . "</td></tr>";
}
echo "</table>"
?>
これは$ _SERVER配列全体です... ArtWorkADが指摘したように、HTTP_USER_AGENTキーを使用すると、OSをより明示的に抽出できます。
\strncasecmp(\PHP_OS, 'WIN', 3) === 0
、\strtoupper(\substr(\PHP_OS, 0, 3)) === 'WIN'
とのパフォーマンスの違いは\stripos(\PHP_OS, 'WIN')
15%未満のようです。3つのソリューションはすべて約100ナノ秒しかかからないため、とにかくこれはマイクロ最適化になります。だからあなたが好きなソリューションを選択してください。最後に、それが\strncasecmp(\PHP_OS, 'WIN', 3) === 0
最も読みやすいと主張するかもしれません。