PHP-Skript – erkennen, ob es unter Linux oder Windows läuft?

Lesezeit: 4 Minuten

Benutzer-Avatar
Silikonpi

Ich habe ein PHP-Skript, das auf einem Windows-System oder einem Linux-System platziert werden kann. Ich muss in beiden Fällen unterschiedliche Befehle ausführen.

Wie kann ich erkennen, in welcher Umgebung ich mich befinde? (vorzugsweise etwas PHP statt clevere Systemhacks)

Aktualisieren

Zur Verdeutlichung wird das Skript von der Befehlszeile aus ausgeführt.

  • Nach der Durchführung von Benchmarks scheint es, dass Leistungsunterschiede zwischen \strncasecmp(\PHP_OS, 'WIN', 3) === 0, \strtoupper(\substr(\PHP_OS, 0, 3)) === 'WIN' und \stripos(\PHP_OS, 'WIN') unter 15 % liegen. Da alle drei Lösungen nur etwa 100 Nanosekunden benötigen, wäre dies ohnehin eine Mikrooptimierung. Wählen Sie also die Lösung, die Ihnen gefällt. Schließlich können Sie das argumentieren \strncasecmp(\PHP_OS, 'WIN', 3) === 0 ist am lesbarsten.

    – kräh

    19. August 2019 um 23:26 Uhr


Benutzer-Avatar
Sander Marschall

Überprüfen Sie den Wert der PHP_OS KonstanteDokumente.

Es gibt Ihnen verschiedene Werte unter Windows wie WIN32, WINNT oder Windows.

Siehe auch: Mögliche Werte für: PHP_OS und php_unameDokumente:

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

  • Welchen Wert hätte es, wenn es Windows wäre? In den Unterlagen kann ich nichts erkennen.

    – Schäbige Robe

    16. Juni 2011 um 4:48 Uhr


  • Shabbyrobe: Siehe stackoverflow.com/questions/738823/possible-values-for-php-os

    – Sander Marschall

    16. Juni 2011 um 13:05 Uhr

  • stripos(PHP_OS, 'WIN') === 0 kann stattdessen verwendet werden, wohl lesbarer / einfacher.

    – Johannes Jagd

    9. November 2018 um 9:07 Uhr


  • @dw1 – es würde immer noch funktionieren, da es am Anfang nach “win” sucht.

    – Johannes Jagd

    26. November 2018 um 12:12 Uhr

  • Und mit php8 haben wir jetzt if (str_starts_with(strtoupper(PHP_OS), 'WIN')) {

    – Rotzarf

    15. September 2021 um 20:57 Uhr

Benutzer-Avatar
Ibu

Sie können überprüfen, ob das Verzeichnistrennzeichen ist / (für Unix/Linux/Mac) oder \ an Fenstern. Der konstante Name ist DIRECTORY_SEPARATOR.

if (DIRECTORY_SEPARATOR === "https://stackoverflow.com/") {
    // unix, linux, mac
}

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

  • Leider funktioniert dies nicht mit Windows 7 und Zend Server. In diesem Fall ist DIRECTORY_SEPARATOR auch ‘\’

    – Achim

    15. April 2014 um 10:54 Uhr


  • @Achim Was meinst du? Zend Server ist eine Serversoftware, kein Betriebssystem. Windows 7 sollte Rückkehr \.

    – mp

    6. August 2014 um 17:41 Uhr


  • strpos(__FILE__,92) nutzt dasselbe Verhalten aus; PATH_SEPARATOR>":" gibt auch für Windows true zurück (PATH_SEPARATOR ist “:” auf allen anderen Betriebssystemen).

    – Titus

    8. Januar 2017 um 12:45 Uhr

  • Habe das in eine Funktion umgewandelt: function is_linux(){return (DIRECTORY_SEPARATOR == '/') ? true : false;}

    – Mario Lurig

    6. Oktober 2017 um 0:25 Uhr

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

scheint etwas eleganter zu sein als die akzeptierte Antwort. Die oben erwähnte Erkennung mit DIRECTORY_SEPARATOR ist jedoch am schnellsten.

  • Tut mir leid, aber das funktioniert nicht richtig, wenn Sie einen Mac-Server verwenden, da Sie auf dem Mac eine Zeichenfolge erhalten, die “DARWIN” enthält, die auch “WIN” enthält, also erhalten Sie auf einem Mac-Server “This is ein Server mit Windows!” was nicht wahr ist.

    – Oma

    28. September 2012 um 23:27 Uhr

  • Nun, das ist nicht ganz richtig. Beachte das strncasecmp nimmt Der Erste n Charaktere, nicht irgendwelche n Figuren. Wenn du es versucht hättest, hättest du es herausgefunden strncasecmp('DARWIN', 'WIN', 3) == 0 wertet zu false.

    – Ondřej Bouda

    14. Oktober 2012 um 15:12 Uhr

Ab PHP 7.2.0 können Sie das laufende Betriebssystem anhand der Konstante erkennen PHP_OS_FAMILY:

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

Siehe die offizielle PHP-Dokumentation für seine möglichen Werte.

Beachten Sie, dass PHP_OS meldet das Betriebssystem, das PHP war gebaut anwas nicht unbedingt dasselbe Betriebssystem ist, auf dem es derzeit ausgeführt wird.

Wenn Sie PHP >= 5.3 verwenden und nur wissen müssen, ob Sie Windows verwenden oder nicht, dann testen Sie, ob eines der Windows-spezifische Konstanten definiert ist, kann eine gute Wette sein, zB:

$windows = defined('PHP_WINDOWS_VERSION_MAJOR');

  • 1. Richtig ist nicht, wo PHP gebaut wurde, sondern wofür es gebaut wurde. 2. Dies gilt für die definierten Fenster-bezogenen Konstanten auf die gleiche Weise …

    – StanE

    9. September 2014 um 11:43 Uhr


  • Jedenfalls kann für Windows erstelltes PHP nicht unter Unix ausgeführt werden, oder?

    – Stalinko

    2. Dezember 2016 um 8:11 Uhr


Das php_uname Funktion kann verwendet werden, um dies zu erkennen.

echo php_uname();

  • 1. Richtig ist nicht, wo PHP gebaut wurde, sondern wofür es gebaut wurde. 2. Dies gilt für die definierten Fenster-bezogenen Konstanten auf die gleiche Weise …

    – StanE

    9. September 2014 um 11:43 Uhr


  • Jedenfalls kann für Windows erstelltes PHP nicht unter Unix ausgeführt werden, oder?

    – Stalinko

    2. Dezember 2016 um 8:11 Uhr


Benutzer-Avatar
Patryk Uszyński

Entsprechend Vordefinierte Konstanten: Vom Benutzer beigesteuerte Anmerkungen Volkers und rdcapasso-Lösung können Sie einfach eine Hilfsklasse 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
}

1360820cookie-checkPHP-Skript – erkennen, ob es unter Linux oder Windows läuft?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy