PHP script-détecter si vous utilisez linux ou Windows?

j'ai un script PHP qui peut être placé sur un système windows ou linux. Je dois exécuter des commandes différentes dans les deux cas.

comment puis-je détecter environnement qui je suis? (de préférence quelque chose de php plutôt que des hacks de système intelligents)


désolé!! le script s'exécute à partir de la ligne de commande!!!!

119
demandé sur siliconpi 2011-05-04 09:36:25

13 réponses

vérifier la valeur de la PHP_OS constante Docs .

il vous donnera diverses valeurs sur Windows comme WIN32 , WINNT ou Windows .

voir aussi: valeurs possibles pour: PHP_OS et 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!';
}
197
répondu Sander Marechal 2018-03-24 03:27:16

vous pouvez vérifier si le répertoire seperator est / (pour unix/linux/mac) ou \ sous windows. Le nom de la constante est DIRECTORY_SEPARATOR

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

if (DIRECTORY_SEPARATOR == '\') {
    // windows
}
49
répondu Ibu 2017-12-21 20:54:22
if (strncasecmp(PHP_OS, 'WIN', 3) == 0) {
    echo 'This is a server using Windows!';
} else {
    echo 'This is a server not using Windows!';
}

semble un peu plus élégant que la réponse acceptée. La détection mentionnée ci-dessus avec DIRECTORY_SEPARATOR est la plus rapide, cependant.

32
répondu Ondřej Bouda 2012-07-23 00:25:11

notez que PHP_OS rapporte L'OS que PHP était construit sur , qui n'est pas nécessairement le même OS qu'il utilise actuellement.

si vous êtes en PHP >= 5.3 et que vous avez juste besoin de savoir si vous utilisez Windows ou non-Windows, alors tester si l'une des constantes spécifiques à Windows est définie peut être un bon pari, par exemple:

$windows = defined('PHP_WINDOWS_VERSION_MAJOR');
16
répondu ejn 2013-02-05 13:12:32

la fonction php_uname peut être utilisée pour le détecter.

echo php_uname();
7
répondu Anders Lindahl 2011-05-04 05:51:34

cela devrait fonctionner en PHP 4.3+:

if (strtolower(PHP_SHLIB_SUFFIX) === 'dll')
{
    // Windows
}
else
{
    // Linux/UNIX/OS X
}
5
répondu Jonathon Hill 2012-11-08 21:24:05

constantes prédéfinies de base: http://us3.php.net/manual/en/reserved.constants.php qui a la constante PHP_OS (string) .

ou si vous voulez détecter L'OS du client:

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

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

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


selon votre édition, vous pouvez vous référer à ce document nom du serveur PHP de la ligne de commande

vous pouvez utiliser

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

Donc

php_uname("s")

's': Nom du système D'exploitation. par exemple. FreeBSD.

ferait l'affaire pour vous, voir ici http://php.net/manual/en/function.php-uname.php

4
répondu Artjom Zabelin 2017-05-23 10:31:19

pour détecter si C'est Windows, OS X ou 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 est un peu plus lent que substr dans ce cas particulier, mais il est assez efficace pour une si petite tâche, et plus élégant.

3
répondu artnikpro 2016-08-16 09:59:49

selon constantes prédéfinies: L'Utilisateur a contribué Notes Volker's et rdcapasso solution, vous pouvez simplement créer la classe helper comme ceci:

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

}

Utilisation:

if(System::getOS() == System::OS_WIN) {
  // do something only on Windows platform
}
3
répondu Patryk Uszyński 2017-01-23 15:37:40

vous pouvez vérifier si une constante existe en PHP >5.3.0 ( manuel )

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

auparavant, cette méthode était utilisée en Symfony. Maintenant ils utilisent une méthode différente :

if ('\' === DIRECTORY_SEPARATOR) {
    // is Windows
}
1
répondu ghost404 2017-12-21 20:25:29

si vous voulez vérifier si vous utilisez Linux, vous n'avez qu'à tester (PHP_OS === 'Linux') . Pas besoin d'utiliser strtolower() et substr().

0
répondu Ricardo Tribaldos 2018-08-22 13:44:42
function isWin(){
 if (strtolower(substr(PHP_OS, 0, 3)) === 'win' || PHP_SHLIB_SUFFIX == 'dll' || PATH_SEPARATOR == ';') {
    return true;
 } else {
    return false;
 }
}
-1
répondu Akam 2016-05-28 17:46:44

de 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>"
?>

C'est la totalité du tableau $_SERVER... comme ArtWorkAD l'a noté, en utilisant la touche HTTP_USER_AGENT, vous pouvez extraire L'OS de manière plus explicite.

-2
répondu Jordan Arseno 2011-05-04 05:40:47