it-swarm.com.de

PHP Skript - Erkennen, ob unter Linux oder Windows läuft?

Ich habe ein PHP Skript, das auf einem Windows-System oder einem Linux-System platziert werden kann. Ich muss in jedem Fall andere Befehle ausführen. 

wie kann ich herausfinden, in welcher Umgebung ich bin? (vorzugsweise etwas php statt cleverer Systemhacks)


entschuldigung!! das Skript läuft von der Kommandozeile aus !!!!

123
siliconpi

Überprüfen Sie den Wert der PHP_OS-KonstanteDocs .

Unter Windows erhalten Sie verschiedene Werte wie WIN32, WINNT oder Windows.

Siehe auch: Mögliche Werte für: PHP_OS und 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

Sie können überprüfen, ob der Verzeichnisseparator / (für Unix/linux/mac) oder \ unter Windows ist. Der Konstantenname lautet 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!';
}

wirkt etwas eleganter als die akzeptierte Antwort. Die oben genannte Erkennung mit DIRECTORY_SEPARATOR ist jedoch die schnellste.

35
Ondřej Bouda

Beachten Sie, dass PHP_OS das Betriebssystem meldet, dass PHP built auf war. Dies ist nicht notwendigerweise dasselbe Betriebssystem, auf dem es gerade ausgeführt wird.

Wenn Sie sich auf PHP> = 5.3 befinden und nur wissen müssen, ob Sie Windows oder Nicht-Windows ausführen, können Sie prüfen, ob eine der Windows-spezifischen Konstanten definiert ist. z.B:

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

Mit der Funktion php_uname kann dies erkannt werden.

echo php_uname();
7
Anders Lindahl

Dies sollte in PHP 4.3+ funktionieren:

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

Core vordefinierte Konstanten:http://us3.php.net/manual/de/reserved.constants.php die Konstante PHP_OS (string) hat.

Oder wenn Sie das Betriebssystem des Clients erkennen möchten:

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

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

Von http://de3.php.net/manual/de/function.get-browser.php


Je nach Ihrer Bearbeitung können Sie auf diese Datenbank zugreifen. PHP Servername von der Befehlszeile aus

Sie können verwenden

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

So

php_uname("s")

's': Betriebssystemname. z.B. FreeBSD.

Würde den Trick für Sie tun, siehe hier http://php.net/manual/de/function.php-uname.php

4
Artjom Zabelin

Gemäß Vordefinierte Konstanten: Vom Benutzer bereitgestellte Notizen Die Lösung von Volker und rdcapasso können Sie einfach eine Helfer-Klasse wie folgt erstellen:

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

}

Verwendungszweck:

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

So stellen Sie fest, ob es sich um Windows, OS X oder Linux handelt:

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 ist in diesem Fall etwas langsamer als substr, ist jedoch für eine so kleine Aufgabe effizient genug und eleganter.

3
artnikpro

Sie können überprüfen, ob eine Konstante in PHP> 5.3.0 ( manual ) vorhanden ist.

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

Bisher wurde diese Methode in Symfony verwendet. Jetzt verwenden sie eine andere Methode :

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

Wenn Sie prüfen möchten, ob Sie unter Linux laufen, testen Sie einfach, ob (PHP_OS === 'Linux') Es ist nicht notwendig, strtolower () und substr () zu verwenden.

0