PHP script - detect whether running under linux or Windows?

PhpWindowsLinuxOperating SystemDetect

Php Problem Overview


I have a PHP script that may be placed on a windows system or a linux system. I need to run different commands in either case.

How can I detect which environment I am in? (preferably something PHP rather than clever system hacks)

Update

To clarify, the script is running from the command line.

Php Solutions


Solution 1 - Php

Check the value of the PHP_OS constantDocs.

It will give you various values on Windows like WIN32, WINNT or Windows.

See as well: Possible Values For: PHP_OS and 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!';
}

Solution 2 - Php

You can check if the directory separator is / (for unix/linux/mac) or \ on windows. The constant name is DIRECTORY_SEPARATOR.

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

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

Solution 3 - Php

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

seems like a bit more elegant than the accepted answer. The aforementioned detection with DIRECTORY_SEPARATOR is the fastest, though.

Solution 4 - Php

Starting with PHP 7.2.0 you can detect the running O.S. using the constant PHP_OS_FAMILY:

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

See the official PHP documentation for its possible values.

Solution 5 - Php

Note that PHP_OS reports the OS that PHP was built on, which is not necessarily the same OS that it is currently running on.

If you are on PHP >= 5.3 and just need to know whether you're running on Windows or not-Windows then testing whether one of the Windows-specific constants is defined may be a good bet, e.g.:

$windows = defined('PHP_WINDOWS_VERSION_MAJOR');

Solution 6 - Php

The php_uname function can be used to detect this.

echo php_uname();

Solution 7 - Php

According to [Predefined Constants: User Contributed Notes][1] Volker's and rdcapasso solution, you can simply create helper class like this:

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

}

Usage:

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

[1]: http://nl3.php.net/manual/en/reserved.constants.php#113172 "Predefined Constants: User Contributed Notes"

Solution 8 - Php

This should work in PHP 4.3+:

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

Solution 9 - Php

To detect whether it's Windows, OS X or 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 is a bit slower than substr in this particular case, yet it's efficient enough for such a small task, and more elegant.

Solution 10 - Php

Core Predefined Constants: http://us3.php.net/manual/en/reserved.constants.php which has the PHP_OS (string) constant.

Or if you want to detect the OS of the client:

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

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

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


According to your edit you can refer to this dublicate https://stackoverflow.com/questions/626416/php-server-name-from-command-line

You can use

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

So

php_uname("s")

> 's': Operating system name. eg. > FreeBSD.

Would do the trick for you, see here http://php.net/manual/en/function.php-uname.php

Solution 11 - Php

You can check if a constant exists in PHP >5.3.0 (manual)

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

Previously, this method was used in Symfony. Now they use a different method:

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

Solution 12 - Php

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

Solution 13 - Php

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

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionsiliconpiView Question on Stackoverflow
Solution 1 - PhpSander MarechalView Answer on Stackoverflow
Solution 2 - PhpIbuView Answer on Stackoverflow
Solution 3 - PhpOndřej BoudaView Answer on Stackoverflow
Solution 4 - PhpjosemmoView Answer on Stackoverflow
Solution 5 - PhpejnView Answer on Stackoverflow
Solution 6 - PhpAnders LindahlView Answer on Stackoverflow
Solution 7 - PhpPatryk UszyńskiView Answer on Stackoverflow
Solution 8 - PhpJonathon HillView Answer on Stackoverflow
Solution 9 - PhpartnikproView Answer on Stackoverflow
Solution 10 - PhpUpCatView Answer on Stackoverflow
Solution 11 - Phpghost404View Answer on Stackoverflow
Solution 12 - PhprtribaldosView Answer on Stackoverflow
Solution 13 - PhpAkamView Answer on Stackoverflow