web-dev-qa-db-fra.com

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

J'ai un script PHP qui peut être placé sur un système Windows ou un système Linux. J'ai besoin d'exécuter différentes commandes dans les deux cas. 

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


pardon pardon!! le script est en cours d'exécution à partir de la ligne de commande !!!!

123
siliconpi

Vérifier la valeur de la constante PHP_OSDocs .

Il vous donnera diverses valeurs sous Windows, telles que WIN32, WINNT ou Windows.

Voir aussi: Valeurs possibles pour: PHP_OS et 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!';
}
200
Sander Marechal

Vous pouvez vérifier si le séparateur de répertoire 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
}
51
Ibu
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 susmentionnée avec DIRECTORY_SEPARATOR est toutefois la plus rapide.

35
Ondřej Bouda

Notez que PHP_OS indique le système d'exploitation sur lequel PHP était construit sur , qui n'est pas nécessairement le même système d'exploitation que celui sur lequel il est actuellement exécuté.

Si vous êtes sur PHP> = 5.3 et que vous voulez juste savoir si vous utilisez Windows ou pas, testez si l'une des constantes définies par Windows est peut-être un bon choix par exemple:

$windows = defined('PHP_WINDOWS_VERSION_MAJOR');
16
ejn

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

echo php_uname();
7
Anders Lindahl

Cela devrait fonctionner dans PHP 4.3+:

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

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

Ou si vous souhaitez détecter le système d'exploitation 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 modification, vous pouvez vous référer à cette liste de doublons PHP Nom du serveur depuis la ligne de commande

Vous pouvez utiliser

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

Alors

php_uname("s")

's': nom du système d'exploitation. par exemple. FreeBSD.

Feriez le tour pour vous, voir ici http://php.net/manual/en/function.php-uname.php

4
Artjom Zabelin

Selon Constantes pré-définies: Notes contribuées par l'utilisateur Volker et la solution rdcapasso, vous pouvez simplement créer une classe auxiliaire 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
}
4
Patryk Uszyński

Pour détecter s'il s'agit de 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 suffisamment efficace pour une tâche aussi petite et plus élégante.

3
artnikpro

Vous pouvez vérifier si une constante existe dans PHP> 5.3.0 ( manual )

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

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

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

Si vous voulez vérifier si vous utilisez Linux, testez simplement si (PHP_OS === 'Linux'). Pas besoin d'utiliser strtolower () et substr ().

0
Ricardo Tribaldos