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 !!!!
Ü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_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!';
}
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
}
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.
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');
Mit der Funktion php_uname kann dies erkannt werden.
echo php_uname();
Dies sollte in PHP 4.3+ funktionieren:
if (strtolower(PHP_SHLIB_SUFFIX) === 'dll')
{
// Windows
}
else
{
// Linux/UNIX/OS X
}
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
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
}
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.
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
}
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.