Signatur
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
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 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";
}
// 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.