Start · Sprachen · PHP · Referenz · lchown

lchown

Funktion

Ändert den Besitzer (Owner) eines symbolischen Links, ohne dem Link selbst zu folgen.

seit PHP 5.1.3 Kategorie: io

Signatur

lchown(string $filename, string|int $user): bool

Beschreibung

lchown() setzt den Eigentümer eines symbolischen Links. Im Gegensatz zu chown() folgt die Funktion dem Symlink nicht, sondern ändert den Besitzer des Links selbst. Das Ziel des Links bleibt unverändert.

Der neue Besitzer kann als Benutzername (string) oder als numerische UID (int) angegeben werden. Diese Funktion steht ausschließlich auf POSIX-kompatiblen Betriebssystemen (Linux, macOS etc.) zur Verfügung; unter Windows ist sie nicht verfügbar.

Nur der Superuser (root) darf den Eigentümer eines Links ändern. Normale Benutzer können den Besitz in der Regel nur dann abgeben, wenn der Zielbenutzer existiert und das Betriebssystem dies erlaubt. Fehler erzeugen eine E_WARNING-Meldung.

Die Funktion ist besonders nützlich in Deployment- oder Installationsskripten, die symbolische Links anlegen und deren Besitzer korrekt setzen müssen, ohne die verknüpfte Datei zu beeinflussen.

Parameter

Name Typ Default Beschreibung
$filename Pflicht string Pfad zum symbolischen Link, dessen Besitzer geändert werden soll.
$user Pflicht string|int Benutzername als string oder numerische UID als int des neuen Eigentümers.

Rückgabewert

Typ
bool
Beschreibung
Gibt true bei Erfolg zurück, false bei einem Fehler. Im Fehlerfall wird zusätzlich eine E_WARNING-Meldung ausgegeben.

Beispiele

Besitzer eines Symlinks per Benutzernamen setzen

<?php
// Voraussetzung: Ausführung als root
$link = '/var/www/html/current';

// Symbolischen Link anlegen (falls noch nicht vorhanden)
if (!file_exists($link)) {
    symlink('/var/www/releases/v2.0', $link);
}

// Besitzer des Symlinks auf 'www-data' setzen
if (lchown($link, 'www-data')) {
    echo "Besitzer des Symlinks erfolgreich geändert.\n";
} else {
    echo "Fehler beim Ändern des Besitzers.\n";
}
Besitzer des Symlinks erfolgreich geändert.

Besitzer per numerischer UID setzen

<?php
// Numerische UID des Benutzers ermitteln
$userInfo = posix_getpwnam('deploy');
if ($userInfo === false) {
    die("Benutzer 'deploy' nicht gefunden.\n");
}

$uid  = $userInfo['uid'];
$link = '/srv/app/current';

if (lchown($link, $uid)) {
    echo "UID {$uid} als Eigentümer des Symlinks gesetzt.\n";
} else {
    echo "Fehler: Konnte Besitzer nicht ändern.\n";
}
UID 1001 als Eigentümer des Symlinks gesetzt.

// Wichtig · Fallstricke

Plattformverfügbarkeit: lchown() ist nur auf POSIX-Systemen (Linux, macOS) verfügbar. Unter Windows existiert die Funktion nicht und führt zu einem Fatal Error.

Berechtigungen: In der Regel sind Root-Rechte erforderlich. Ein normaler Benutzer kann den Besitz eines Links üblicherweise nicht ändern. Skripte, die diese Funktion nutzen, sollten mit minimalen Berechtigungen ausgeführt werden und nur gezielt privilegierte Operationen durchführen.

Unterschied zu chown(): chown() folgt Symlinks und ändert den Besitzer der Zieldatei. lchown() ändert ausschließlich den Besitzer des Links selbst.