Signatur
Beschreibung
php_uname() liefert Details über das Betriebssystem, auf dem PHP ausgeführt wird – ähnlich dem Unix-Kommando uname. Mit dem Parameter $mode lässt sich gezielt steuern, welche Information zurückgegeben wird: Systemname, Hostname, Release, Version oder Maschinentyp.
Die Funktion ist nützlich, um plattformspezifisches Verhalten im Code abzufangen, Systemdiagnosen zu erstellen oder Debugging-Informationen zu loggen. Typische Anwendungsfälle sind etwa das Prüfen des Betriebssystemtyps (Windows vs. Linux) oder das Ermitteln des Hostnamens.
Zu beachten ist, dass php_uname() – im Gegensatz zu PHP_OS – Informationen über das aktuell laufende System zurückgibt. Bei PHP im Safe Mode oder bestimmten Hosting-Umgebungen kann die Ausgabe eingeschränkt sein und stattdessen nur generische Betriebssysteminformationen liefern.
'a'– Alle Informationen kombiniert (Standard)'s'– Betriebssystemname (z. B.Linux,Windows NT)'n'– Hostname des Systems'r'– Release-Version (z. B.5.15.0-76-generic)'v'– Versions-Information'm'– Maschinentyp (z. B.x86_64)
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $mode | string | 'a' | Einzelnes Zeichen, das bestimmt, welche Information zurückgegeben wird: 'a' (alle), 's' (Systemname), 'n' (Hostname), 'r' (Release), 'v' (Version), 'm' (Maschinentyp). |
Rückgabewert
'a' werden alle Informationen in einem einzigen String kombiniert zurückgegeben.Beispiele
Alle Systeminformationen auf einmal ausgeben
<?php
// Gibt alle Systeminformationen zurück (Standard-Modus 'a')
$info = php_uname();
echo $info;
// Beispiel-Ausgabe unter Linux:
// Linux webserver 5.15.0-76-generic #83-Ubuntu SMP Thu Jun 15 19:16:32 UTC 2023 x86_64
Betriebssystem erkennen und plattformspezifischen Code ausführen
<?php
// Nur den Betriebssystem-Namen ermitteln
$os = php_uname('s');
if (stripos($os, 'windows') !== false) {
echo "Windows-System erkannt: " . $os . PHP_EOL;
// Windows-spezifische Logik...
} else {
echo "Nicht-Windows-System erkannt: " . $os . PHP_EOL;
// Linux/macOS-spezifische Logik...
}
// Hostname und Maschinentyp ausgeben
echo "Hostname: " . php_uname('n') . PHP_EOL;
echo "Maschinentyp: " . php_uname('m') . PHP_EOL;
Systeminformationen für Diagnose-Log erfassen
<?php
// Detaillierte Systeminformation für ein Diagnose-Log zusammenstellen
function getSystemDiagnostics(): array {
return [
'os_name' => php_uname('s'),
'hostname' => php_uname('n'),
'os_release' => php_uname('r'),
'os_version' => php_uname('v'),
'machine' => php_uname('m'),
'php_version'=> PHP_VERSION,
];
}
$diag = getSystemDiagnostics();
foreach ($diag as $key => $value) {
echo str_pad($key, 15) . ': ' . $value . PHP_EOL;
}
// Wichtig · Fallstricke
Sicherheitshinweis: Die Ausgabe von php_uname() sollte niemals ungefiltert an Endnutzer ausgegeben werden, da sie interne Systeminformationen (Hostnamen, Kernel-Version, Architektur) preisgibt, die für Angreifer nützlich sein können. Systemdiagnosen sollten ausschließlich in internen Logs oder passwortgeschützten Admin-Bereichen erscheinen.
In älteren PHP-Versionen mit aktiviertem Safe Mode gibt php_uname() lediglich den Betriebssystemtyp zurück, auf dem PHP kompiliert wurde – nicht unbedingt das tatsächlich laufende System. Ab PHP 5.3.0 wurde der Safe Mode entfernt.
Eine Alternative für den reinen Betriebssystemtyp (ohne Safe-Mode-Einschränkungen) ist die Konstante PHP_OS (Betriebssystem, auf dem PHP kompiliert wurde) bzw. PHP_OS_FAMILY (ab PHP 7.2, liefert z. B. 'Windows', 'Linux', 'Darwin').