wake-up-neo.com

Woher bekomme ich das Betriebssystem? PHP läuft?

Um ein Unix/DOS-spezifisches Skript zu erstellen, muss ich wissen, welches Betriebssystem ich bin. 

Wie bekomme ich diese Informationen?
phpinfo(); sagt mir viel mehr und nicht sehr klar, ob ich auf Unix laufe oder nicht.

47
Martin Klepsch

PHP hat viele vordefinierte Konstanten , die oft nützlich sind.

Hier ist PHP_OS der, den Sie suchen.


Beispielsweise auf meinem aktuellen Computer dieser Code:

var_dump(PHP_OS);

Gibt:

string 'Linux' (length=5)


Sie haben einige Beispiele und Vergleiche mit der Funktion php_uname auf der Handbuchseite von php_uname ; zum Beispiel (quoting):

<?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:

Nur für den Namen des Operators System in Betracht ziehen, den PHP_OS.__ zu verwenden. konstant, aber bedenken Sie das Die Konstante enthält die Operation system PHP war built an.

90
Pascal MARTIN

Denken Sie jedoch daran, dass PHP_OS tatsächlich die Plattform enthält, auf der PHP erstellt wurde. Dies ist möglicherweise nicht die Plattform, auf der sie bereitgestellt wird. Daher ist php_uname('s') zuverlässiger.

29
spikyjt

Ab PHP 7.2. haben wir eine neue vordefinierte Konstante, um die Betriebssystemfamilie abzurufen, d. H. PHP_OS_FAMILY. Es wird eine Zeichenfolge zurückgegeben, entweder 'Windows', 'BSD', 'OSX', 'Solaris', 'Linux' oder 'Unbekannt'.

8
shery089

PHP_OS ist mit dem Hostnamen os vorinstalliert: http://de2.php.net/manual/de/reserved.constants.php

3
jmucchiello

Es gibt zwei Möglichkeiten, die Plattform zu überprüfen, auf der PHP ausgeführt wird.

  1. Verwenden Sie PHP_OS, das ein const ist und auf den 'operativen Systemnamen' verweist, den Ihr PHP darin eingebaut hat.
  2. Mit der integrierten Funktion PHP php_uname() erfahren Sie mehr über die Plattform (Name des Betriebssystems, Hostname, Version , Release-Name, Maschinentyp), auf der Ihr Skript ausgeführt wird . .
2
M.J.Ahmadi

PHP Bietet keine Funktion zum Abrufen des Namens der Distribution. php_uname ähnelt dem Linux-Befehl uname und bietet keine Informationen zur Distribution selbst.

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

Ich denke, der beste Weg, um herauszufinden, was das laufende Betriebssystem/die Verteilung ist, ist /etc/os-release zu lesen. Die gute Sache ist, dass diese Datei über Leseberechtigung für alle Systembenutzer verfügt, und die schlechte Sache ist, dass sie möglicherweise nicht für Shared Hosting funktioniert.

Hier habe ich eine sehr einfache PHP -Funktion geschrieben, die os-release in ein Array liest und konvertiert:

    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 etwa so:

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
)

Held og lykke [1] ;-) 

[1] Dänische Phrase bedeutet viel Glück.

2
Ahmad

In PHP 7.2.0 können Sie die Konstante PHP_OS_FAMILY verwenden:

In einer anderen PHP Version können Sie Folgendes verwenden:

/**
* return DOS OR UNIX
*/
function familyOS() {
   return (stripos(PHP_OS, "WIN") === 0)? "DOS" : "UNIX";
}
1
fitorec
#!/usr/bin/env php
<?php
$platform = DIRECTORY_SEPARATOR === '\\'
    ? 'Windows'
    : 'Unix/Linux';

Mir ist bewusst, dass dies nicht sehr detailliert ist, aber für eine einfache Erkennung zwischen Win- und * Nix-Systemen reicht es aus. YMMV

0
helvete