Start · Sprachen · PHP · Referenz · rpmdefine

rpmdefine

Funktion

Definiert oder ändert den Wert eines RPM-Makros innerhalb der PHP-RPM-Erweiterung.

Kategorie: misc

Signatur

rpmdefine(string $expr): void

Beschreibung

rpmdefine() ermöglicht es, RPM-Makros zur Laufzeit zu definieren oder bestehende Makrodefinitionen zu überschreiben. RPM-Makros werden von der RPM-Bibliothek intern genutzt, um Pfade, Versionen, Architekturen und andere Konfigurationswerte zu interpolieren.

Die Funktion gehört zur PHP-Erweiterung rpm (PECL), die den Zugriff auf RPM-Paketdaten direkt aus PHP-Skripten heraus ermöglicht. Sie ist nützlich, wenn RPM-Pakete eingelesen, validiert oder Metadaten abgefragt werden sollen und dabei spezifische Makrowerte gesetzt werden müssen – etwa für benutzerdefinierte Installationspfade oder Architekturen.

Der Ausdruck $expr folgt dabei dem RPM-Makrosyntax: %define makroname wert. Nach dem Aufruf steht das Makro für alle nachfolgenden RPM-Operationen in derselben PHP-Sitzung zur Verfügung.

Die Funktion ist besonders dann hilfreich, wenn Systeminformationen oder Pfade dynamisch in RPM-Abfragen einfließen sollen, ohne die globale RPM-Konfiguration auf dem System dauerhaft verändern zu müssen.

Parameter

Name Typ Default Beschreibung
$expr Pflicht string Ein RPM-Makroausdruck in der Form %define makroname wert oder makroname wert, der das zu definierende oder zu ändernde Makro sowie seinen Wert angibt.

Rückgabewert

Typ
void
Beschreibung
Die Funktion gibt keinen Wert zurück.

Beispiele

Einfaches RPM-Makro definieren

<?php
// Definiert das Makro '_prefix' mit einem benutzerdefinierten Pfad
rpmdefine("%define _prefix /opt/myapp");

// Anschließend RPM-Datei lesen – das Makro wird bei der Auflösung berücksichtigt
$info = rpminfo("/path/to/package.rpm");
if ($info !== null) {
    echo "Paketname: " . $info['Name'] . PHP_EOL;
    echo "Version: " . $info['Version'] . PHP_EOL;
}
?>
Paketname: mypackage Version: 1.0.0

Architektur-Makro überschreiben

<?php
// Überschreibt das Architektur-Makro für spezifische Abfragen
rpmdefine("%define _arch x86_64");

// RPM-Versionsinformationen der Bibliothek ausgeben
$version = rpmvercmp("1.0-1", "1.0-2");
echo "Versionsvergleich: " . $version . PHP_EOL; // -1, 0 oder 1
?>
Versionsvergleich: -1

// Wichtig · Fallstricke

Hinweis: rpmdefine() ist Teil der PECL-Erweiterung rpm, die nicht standardmäßig in PHP enthalten ist und separat installiert werden muss (pecl install rpm). Die Verfügbarkeit hängt davon ab, ob die zugrunde liegende librpm auf dem System vorhanden ist.

Makros, die mit dieser Funktion gesetzt werden, gelten nur für die Laufzeit des aktuellen PHP-Prozesses. Sie wirken sich nicht dauerhaft auf die systemweite RPM-Konfiguration aus.

Es sollte darauf geachtet werden, keine sicherheitsrelevanten Werte (z. B. aus Benutzereingaben) ungefiltert an rpmdefine() zu übergeben, da dies unerwartetes Verhalten bei RPM-Operationen auslösen kann.