2009-09-26 5 views

Antwort

86

PHP viele predefined constants hat, die oft nützlich sind.

Hier ist PHP_OS ist die, die Sie suchen.


Zum Beispiel auf meiner aktuellen Maschine, dieser Code:

var_dump(PHP_OS); 

Gibt:

string 'Linux' (length=5) 


Sie haben einige Beispiele und Vergleiche mit dem, was die Funktion erhalten können Sie auf der manual page of php_uname; zum Beispiel (Zitat):

<?php 
echo php_uname(); 
echo PHP_OS; 

/* Some possible outputs: 
Linux localhost 2.4.21-0.13mdk #1 Fri Mar 14 15:08:06 EST 2003 i686 
Linux 

FreeBSD localhost 3.2-RELEASE #15: Mon Dec 17 08:46:02 GMT 2001 
FreeBSD 

Windows NT XN1 5.1 build 2600 
WINNT 
*/ 

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

Diese Seite sagt auch:

Für den Namen nur das Betrieb System, betrachten den PHP_OS Konstante verwendet, aber im Kopf dieses konstant halten enthält das Betriebssystem System PHP wurde gebaut auf.

+5

Wie konnte PHP_OS jemals „gearbeitet ganz gut "wenn es dir das OS PHP gibt, auf dem gebaut wurde? Es wird früher oder später brechen. – Pacerier

27

Bedenke nur, dass PHP_OS tatsächlich die Plattform enthält, auf der PHP gebaut wurde. Dies ist möglicherweise nicht die gleiche Plattform wie die, auf der es bereitgestellt wird. Daher ist php_uname('s') zuverlässiger.

+0

'php_uname ('s')' auf Windows 7 gibt "Windows NT" zurück, also weiß ich nicht, wie viel zuverlässiger es ist :) Ich denke, man könnte argumentieren, Win 7 basiert auf NT, aber immer noch ... –

+7

Windows 7 absolut ist Windows NT (Version 6.1). Vista war Windows NT 6, XP war NT 5.1, 2000 war NT 5. Also ja, es ist zuverlässig! Überprüfen Sie [hier] (http://en.wikipedia.org/wiki/List_of_Microsoft_Windows_versions) als Referenz. Geben Sie "ver" an einer Eingabeaufforderung mit dem Befehl cmd ein, um die Versionsnummer Ihres Windows-Betriebssystems anzuzeigen. – spikyjt

+1

Das scheint mir die richtige Antwort zu sein. Die angenommene Antwort ist falsch und beantwortet die OP-Frage nicht. –

2

Es gibt 2 verschiedene Möglichkeiten, die Plattform zu überprüfen, auf der PHP läuft.

  1. PHP_OS, der zu einem const ist und wird die operativen Systemnamen "verweisen, die Ihre PHP in ihm gebaut wurden.
  2. PHP integrierte Funktion Mit php_uname(), dass Sie mehr über Plattform wird zeigen (Betriebssystem, Host-Name, Version Informationen, Freigabename, Maschinentyp), die Ihr Skript auf es ausgeführt wird.
-2
$user_agent  = $_SERVER['HTTP_USER_AGENT']; 
function getOS() { 

    global $user_agent; 

    $os_platform = "Unknown OS Platform"; 

    $os_array  = array(
          '/windows nt 6.2/i'  => 'Windows 8', 
          '/windows nt 6.1/i'  => 'Windows 7', 
          '/windows nt 6.0/i'  => 'Windows Vista', 
          '/windows nt 5.2/i'  => 'Windows Server 2003/XP x64', 
          '/windows nt 5.1/i'  => 'Windows XP', 
          '/windows xp/i'   => 'Windows XP', 
          '/windows nt 5.0/i'  => 'Windows 2000', 
          '/windows me/i'   => 'Windows ME', 
          '/win98/i'    => 'Windows 98', 
          '/win95/i'    => 'Windows 95', 
          '/win16/i'    => 'Windows 3.11', 
          '/macintosh|mac os x/i' => 'Mac OS X', 
          '/mac_powerpc/i'  => 'Mac OS 9', 
          '/linux/i'    => 'Linux', 
          '/ubuntu/i'    => 'Ubuntu', 
          '/iphone/i'    => 'iPhone', 
          '/ipod/i'    => 'iPod', 
          '/ipad/i'    => 'iPad', 
          '/android/i'   => 'Android', 
          '/blackberry/i'   => 'BlackBerry', 
          '/webos/i'    => 'Mobile' 
         ); 

    foreach ($os_array as $regex => $value) { 

     if (preg_match($regex, $user_agent)) { 
      $os_platform = $value; 
     } 

    } 

    return $os_platform; 

} 

$user_os = getOS(); 


$device_details = "<strong>Operating System: </strong>".$user_os.""; 

print_r($device_details); 
1

PHP jede Funktion nicht zur Verfügung stellt den Namen der Verteilung zu bekommen, ist ähnlich wie Linux Befehl uname, bedeutet dies, es keine Informationen über die Verteilung selbst liefert.

Weder noch PHP_OS geben Informationen. über die Verteilung aber den Betriebssystemtyp (z. B. Linux/Windows).

Ich denke, der beste Weg zu wissen, was OS/Verteilung zu lesen ist /etc/os-release, die gute Sache ist diese Datei hat Leseberechtigung für alle Benutzer und die schlechte Sache ist es möglicherweise nicht auf Shared Hosting arbeiten.

Hier schrieb ich eine sehr einfache PHP-Funktion, die und os-release in ein Array umwandeln lautet:

function getOSInformation() 
    { 
     if (false == function_exists("shell_exec") || false == is_readable("/etc/os-release")) { 
      return null; 
     } 

     $os   = shell_exec('cat /etc/os-release'); 
     $listIds = preg_match_all('/.*=/', $os, $matchListIds); 
     $listIds = $matchListIds[0]; 

     $listVal = preg_match_all('/=.*/', $os, $matchListVal); 
     $listVal = $matchListVal[0]; 

     array_walk($listIds, function(&$v, $k){ 
      $v = strtolower(str_replace('=', '', $v)); 
     }); 

     array_walk($listVal, function(&$v, $k){ 
      $v = preg_replace('/=|"/', '', $v); 
     }); 

     return array_combine($listIds, $listVal); 
    } 

Diese Funktion druckt etwas wie folgt aus:

Array 
(
    [name] => Ubuntu 
    [version] => 16.04.2 LTS (Xenial Xerus) 
    [id] => ubuntu 
    [id_like] => debian 
    [pretty_name] => Ubuntu 16.04.2 LTS 
    [version_id] => 16.04 
    [home_url] => http://www.ubuntu.com/ 
    [support_url] => http://help.ubuntu.com/ 
    [bug_report_url] => http://bugs.launchpad.net/ubuntu/ 
    [version_codename] => xenial 
    [ubuntu_codename] => xenial 
) 

gehaltene og lykke [1]; -)

[1] Dänischer Ausdruck bedeutet viel Glück.

3

Ab PHP 7.2.0 haben wir eine neue vordefinierte Konstante die Betriebssystemfamilie heißt PHP_OS_FAMILY zu erhalten. Es gibt eine Zeichenfolge Entweder "Windows", "BSD", "OSX", "Solaris", "Linux" oder "Unbekannt".

Verwandte Themen