Ich habe ein PHP-Skript, das auf einem Windows-System oder einem Linux-System platziert werden kann. In beiden Fällen muss ich verschiedene Befehle ausführen.
Wie kann ich erkennen, in welcher Umgebung ich mich befinde? (vorzugsweise etwas PHP anstelle von cleveren Systemhacks)
Aktualisieren
Zur Verdeutlichung wird das Skript über die Befehlszeile ausgeführt.
\strncasecmp(\PHP_OS, 'WIN', 3) === 0
,\strtoupper(\substr(\PHP_OS, 0, 3)) === 'WIN'
und\stripos(\PHP_OS, 'WIN')
ist unter 15%. Da alle drei Lösungen nur ungefähr 100 Nanosekunden benötigen, wäre dies ohnehin eine Mikrooptimierung. Wählen Sie also eine beliebige Lösung. Schließlich können Sie argumentieren, dass dies\strncasecmp(\PHP_OS, 'WIN', 3) === 0
am besten lesbar ist.Antworten:
Überprüfen Sie den Wert der
PHP_OS
Konstanten Docs .Es gibt Ihnen verschiedene Werte unter Windows wie
WIN32
,WINNT
oderWindows
.Siehe auch: Mögliche Werte für: PHP_OS und
php_uname
Docs :quelle
stripos(PHP_OS, 'WIN') === 0
kann stattdessen verwendet werden, wohl besser lesbar / einfach.Sie können überprüfen, ob das Verzeichnis-Trennzeichen
/
(für Unix / Linux / Mac) oder\
unter Windows ist. Der konstante Name istDIRECTORY_SEPARATOR
.quelle
strpos(__FILE__,92)
nutzt das gleiche Verhalten aus;PATH_SEPARATOR>":"
Gibt auch für Windows true zurück (PATH_SEPARATOR ist auf allen anderen Betriebssystemen ":").function is_linux(){return (DIRECTORY_SEPARATOR == '/') ? true : false;}
scheint ein bisschen eleganter als die akzeptierte Antwort. Die oben erwähnte Erkennung mit DIRECTORY_SEPARATOR ist jedoch die schnellste.
quelle
strncasecmp
nimmt die ersten n Zeichen, nicht nur alle n Zeichen. Wenn Sie es versucht hätten, hätten Sie herausgefunden, dassstrncasecmp('DARWIN', 'WIN', 3) == 0
zufalse
.Beachten Sie, dass PHP_OS meldet das Betriebssystem , das PHP wurde gebaut auf , die nicht unbedingt das gleiche O ist , dass es derzeit ausgeführt wird .
Wenn Sie mit PHP> = 5.3 arbeiten und nur wissen müssen, ob Sie unter Windows ausgeführt werden oder nicht , kann es eine gute Wahl sein, zu testen, ob eine der Windows-spezifischen Konstanten definiert ist, z.
quelle
Die Funktion php_uname kann verwendet werden, um dies zu erkennen.
quelle
Gemäß der vordefinierten Konstanten: Vom Benutzer bereitgestellte Notizen Die Lösung von Volker und rdcapasso können Sie einfach eine Hilfsklasse wie die folgende erstellen:
Verwendung:
quelle
Dies sollte in PHP 4.3+ funktionieren:
quelle
Ab PHP 7.2.0 können Sie das laufende Betriebssystem anhand der Konstanten erkennen
PHP_OS_FAMILY
:Die möglichen Werte finden Sie in der offiziellen PHP-Dokumentation .
quelle
Vordefinierte Kernkonstanten: http://us3.php.net/manual/en/reserved.constants.php mit der
PHP_OS (string)
Konstante.Oder wenn Sie das Betriebssystem des Clients erkennen möchten:
Von http://us3.php.net/manual/en/function.get-browser.php
Entsprechend Ihrer Bearbeitung können Sie über die Befehlszeile auf diesen veröffentlichten PHP- Servernamen verweisen
Sie können verwenden
So
Würde den Trick für Sie tun, siehe hier http://php.net/manual/en/function.php-uname.php
quelle
So erkennen Sie, ob es sich um Windows, OS X oder Linux handelt:
stripos
ist etwas langsamer alssubstr
in diesem speziellen Fall, aber effizient genug für eine so kleine Aufgabe und eleganter.quelle
Sie können überprüfen, ob in PHP> 5.3.0 ( manuell ) eine Konstante vorhanden ist.
Bisher wurde diese Methode in Symfony verwendet. Jetzt verwenden sie eine andere Methode :
quelle
Wenn Sie überprüfen möchten, ob es unter Linux ausgeführt wird, testen Sie einfach, ob
(PHP_OS === 'Linux')
. Strtolower () und substr () müssen nicht verwendet werden.quelle
quelle
Von http://www.php.net/manual/en/reserved.variables.server.php#102162 :
Dies ist das gesamte $ _SERVER-Array ... Wie ArtWorkAD festgestellt hat, können Sie das Betriebssystem mithilfe des Schlüssels HTTP_USER_AGENT expliziter extrahieren.
quelle