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.
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.
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.
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'.
PHP_OS ist mit dem Hostnamen os vorinstalliert: http://de2.php.net/manual/de/reserved.constants.php
Es gibt zwei Möglichkeiten, die Plattform zu überprüfen, auf der PHP ausgeführt wird.
PHP_OS
, das ein const ist und auf den 'operativen Systemnamen' verweist, den Ihr PHP darin eingebaut hat.php_uname()
erfahren Sie mehr über die Plattform (Name des Betriebssystems, Hostname, Version , Release-Name, Maschinentyp), auf der Ihr Skript ausgeführt wird . .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.
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";
}
#!/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