Start · Sprachen · PHP · Referenz · rpmexpand

rpmexpand

Funktion

Gibt den expandierten Wert eines RPM-Makros zurück, indem das angegebene Makro durch RPM ausgewertet wird.

Kategorie: misc

Signatur

rpmexpand(string $macro): string|false

Beschreibung

rpmexpand() wertet einen RPM-Makro-Ausdruck aus und gibt den expandierten Wert als Zeichenkette zurück. RPM-Makros sind Platzhalter oder Kurzbezeichnungen, die in der RPM-Paketverwaltung genutzt werden, um Systemwerte, Pfade oder Konfigurationswerte zu kapseln (z. B. %{_bindir} für das Verzeichnis der ausführbaren Dateien).

Diese Funktion ist Teil der PHP-RPM-Erweiterung (rpm) und setzt voraus, dass diese Erweiterung installiert und aktiviert ist. Sie ist vor allem auf Linux-Systemen mit RPM-basierter Paketverwaltung (z. B. Fedora, CentOS, RHEL, openSUSE) nützlich.

Typische Anwendungsfälle sind Skripte, die Systeminformationen aus der RPM-Konfiguration auslesen müssen, etwa um Installationspfade oder Build-Verzeichnisse dynamisch zu ermitteln, ohne diese hart zu kodieren.

Falls die Expansion fehlschlägt oder ein ungültiges Makro übergeben wird, gibt die Funktion false zurück.

Parameter

Name Typ Default Beschreibung
$macro Pflicht string Der zu expandierende RPM-Makro-Ausdruck, z. B. %{_bindir} oder %{_sysconfdir}. Der Ausdruck wird an die RPM-Makro-Engine übergeben und ausgewertet.

Rückgabewert

Typ
string|false
Beschreibung
Gibt den expandierten Wert des Makros als Zeichenkette zurück. Falls das Makro nicht aufgelöst werden kann oder ein Fehler auftritt, wird false zurückgegeben.

Beispiele

Standardmäßige RPM-Systempfade abfragen

<?php
// Gibt das Verzeichnis für ausführbare Dateien aus (z. B. /usr/bin)
$bindir = rpmexpand('%{_bindir}');
if ($bindir !== false) {
    echo 'Binärverzeichnis: ' . $bindir . PHP_EOL;
} else {
    echo 'Makro konnte nicht expandiert werden.' . PHP_EOL;
}

// Konfigurationsverzeichnis ermitteln (z. B. /etc)
$sysconfdir = rpmexpand('%{_sysconfdir}');
echo 'Konfigurationsverzeichnis: ' . $sysconfdir . PHP_EOL;

// Präfix-Verzeichnis (z. B. /usr)
$prefix = rpmexpand('%{_prefix}');
echo 'Präfix: ' . $prefix . PHP_EOL;
Binärverzeichnis: /usr/bin Konfigurationsverzeichnis: /etc Präfix: /usr

RPM-Version und Build-Architektur auslesen

<?php
// Systemarchitektur ermitteln (z. B. x86_64)
$arch = rpmexpand('%{_arch}');
echo 'Architektur: ' . $arch . PHP_EOL;

// RPM-Version ermitteln
$rpmversion = rpmexpand('%{rpm_version}');
if ($rpmversion !== false) {
    echo 'RPM-Version: ' . $rpmversion . PHP_EOL;
} else {
    echo 'RPM-Version nicht verfügbar.' . PHP_EOL;
}

// Unbekanntes Makro – Fehlerbehandlung
$unknown = rpmexpand('%{_nicht_existierendes_makro}');
if ($unknown === false) {
    echo 'Unbekanntes Makro konnte nicht aufgelöst werden.' . PHP_EOL;
} else {
    echo 'Wert: ' . $unknown . PHP_EOL;
}
Architektur: x86_64 RPM-Version: 4.18.0 Wert: %{_nicht_existierendes_makro}

// Wichtig · Fallstricke

Verfügbarkeit: Diese Funktion steht nur zur Verfügung, wenn die PHP-RPM-Erweiterung (pecl/rpm) installiert und in der php.ini aktiviert ist. Auf Nicht-RPM-Systemen (z. B. Debian/Ubuntu) ist sie in der Regel nicht vorhanden.

Rückgabewert bei unbekannten Makros: Beachte, dass RPM bei unbekannten Makros unter Umständen den ursprünglichen Makro-String unverändert zurückgibt statt false. Prüfe den Rückgabewert daher gegebenenfalls auf Plausibilität.

Sicherheit: Übergib keine vom Benutzer unkontrollierten Eingaben an rpmexpand(), ohne diese zuvor zu validieren, da RPM-Makros mächtige Ausdrücke enthalten können.