Answers:
检查PHP_OS常量Docs的值。
它会给你不同的值在Windows一样WIN32,WINNT或Windows。
另请参见:可能的值:PHP_OS和php_unameDocs:
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是建立在,这是不一定相同的操作系统,它当前正在运行。
如果您使用的是PHP> = 5.3,并且只需要知道您是否在Windows上运行-Windows,则可以测试是否定义了Windows特定的常量之一,例如:
$windows = defined('PHP_WINDOWS_VERSION_MAJOR');根据“ 预定义常量:用户贡献的注释”, 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
}
核心预定义常数: http : //us3.php.net/manual/en/reserved.constants.php,其中包含该PHP_OS (string)常数。
或者,如果您要检测客户端的操作系统,请执行以下操作:
<?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键,您可以更明确地提取操作系统。
\strncasecmp(\PHP_OS, 'WIN', 3) === 0,\strtoupper(\substr(\PHP_OS, 0, 3)) === 'WIN'和之间的性能差异似乎\stripos(\PHP_OS, 'WIN')都低于15%。由于所有这三种解决方案仅花费大约100纳秒,因此无论如何这将是微优化。因此,选择您喜欢的任何解决方案。最后,您可能会认为这\strncasecmp(\PHP_OS, 'WIN', 3) === 0是最易读的。