PHP脚本 - 检测是在linux还是Windows下运行?

时间:2011-05-04 05:36:25

标签: php windows linux operating-system detect

我有一个可以放在Windows系统或Linux系统上的PHP脚本。在任何一种情况下我都需要运行不同的命令。

如何检测我所在的环境? (最好是PHP而不是聪明的系统黑客)

更新

为了澄清,脚本是从命令行运行的。

14 个答案:

答案 0 :(得分:208)

检查PHP_OS constantDocs

的值

它会在Windows上为您提供各种值,例如WIN32WINNTWindows

请参阅:Possible Values For: PHP_OSphp_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!';
}

答案 1 :(得分:54)

您可以在Windows上检查目录分隔符是/(对于unix / linux / mac)还是\。常量名称为DIRECTORY_SEPARATOR

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

if (DIRECTORY_SEPARATOR == '\\') {
    // windows
}

答案 2 :(得分:36)

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进行的上述检测是最快的。

答案 3 :(得分:16)

请注意PHP_OS reports the OS that PHP was built on,它不一定与当前运行的操作系统相同。

如果您使用的是PHP&gt; = 5.3并且只需知道您是在Windows上运行还是不在Windows上运行,那么测试是否定义了Windows-specific constants之一可能是一个不错的选择,例如:< / p>

$windows = defined('PHP_WINDOWS_VERSION_MAJOR');

答案 4 :(得分:8)

php_uname功能可用于检测此情况。

echo php_uname();

答案 5 :(得分:6)

这应该适用于PHP 4.3 +:

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

答案 6 :(得分:4)

核心预定义常量: 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


根据您的编辑,您可以参考此dublicate PHP Server Name from Command Line

您可以使用

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

所以

php_uname("s")
  

's':操作系统名称。例如。   FreeBSD的。

为你做的伎俩,请看这里http://php.net/manual/en/function.php-uname.php

答案 7 :(得分:4)

根据Predefined Constants: User Contributed Notes Volker&rdcapasso解决方案,你可以简单地创建这样的辅助类:

$cnt = 0
Get-Content 'C:\path\to\input.csv' |
  Where-Object { ($cnt++) -ne 4 } |
  Set-Content 'C:\path\to\output.csv'

<强>用法:

<?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;
        }
    }

}

答案 8 :(得分:3)

检测它是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
}
在这种特殊情况下,

stripossubstr慢一点,但它对于这么小的任务来说足够有效,而且更加优雅。

答案 9 :(得分:1)

您可以检查PHP&gt; 5.3.0(manual

中是否存在常量
if (defined('PHP_WINDOWS_VERSION_BUILD')) {
    // is Windows
}

以前,这种方法用于Symfony。现在他们使用different method

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

答案 10 :(得分:1)

从PHP 7.2.0开始,您可以检测正在运行的操作系统。使用常量PHP_OS_FAMILY

if (PHP_OS_FAMILY === "Windows") {
  echo "Running on Windows";
} elseif (PHP_OS_FAMILY === "Linux") {
  echo "Running on Linux";
}

有关可能的值,请参见official PHP documentation

答案 11 :(得分:0)

If you want to check if running under Linux, just test if (PHP_OS === 'Linux'). No need to use strtolower() and substr().

答案 12 :(得分:-1)

function isWin(){
 if (strtolower(substr(PHP_OS, 0, 3)) === 'win' || PHP_SHLIB_SUFFIX == 'dll' || PATH_SEPARATOR == ';') {
    return true;
 } else {
    return false;
 }
}

答案 13 :(得分:-2)

来自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键,您可以更明确地提取操作系统。