lchgrp()
Die PHP-Funktion lchgrp() ändert die Gruppeninhaberschaft eines symbolischen Links selbst, nicht die der Zieldatei. Ähnlich wie chgrp().
Die PHP-Funktion lchgrp() ändert die Gruppeninhaberschaft des symbolischen Links selbst – nicht die der Datei, auf die der Link zeigt. Diese Seite erläutert, was die Funktion tut, wie sie sich von chgrp() unterscheidet, welche Parameter sie erwartet, was sie zurückgibt und welche Berechtigungs- und Plattformregeln darüber entscheiden, ob der Aufruf erfolgreich ist.
Was ist die Funktion lchgrp()?
Ein symbolischer Link (Symlink) ist eine kleine Datei, die auf einen anderen Pfad verweist. Die meisten Dateisystemfunktionen „folgen" dem Link und arbeiten auf dem Ziel. lchgrp() ist die Ausnahme: Das Präfix l bedeutet, dass die Funktion auf den Link-Knoten selbst wirkt und die Gruppe des Ziels unverändert lässt.
Das ist wichtig, wenn Link und Ziel unterschiedlichen Gruppen gehören oder wenn Sie die Berechtigungen des Links ändern möchten, ohne die referenzierte Datei zu beeinflussen. Das Äquivalent für den Besitzer ist lchown(); die zielfolgende Variante ist chgrp().
Syntax
lchgrp(string $filename, string|int $group): bool| Parameter | Beschreibung |
|---|---|
$filename | Pfad zum symbolischen Link, dessen Gruppe geändert werden soll. |
$group | Die neue Gruppe, angegeben als Gruppenname ('staff') oder numerische GID (20). |
Bei Erfolg gibt die Funktion true zurück, bei einem Fehler false. Im Fehlerfall gibt PHP außerdem eine E_WARNING-Meldung aus.
Verwendung von lchgrp()
Übergeben Sie den Link-Pfad und die Zielgruppe, und prüfen Sie dann den booleschen Rückgabewert:
<?php
$link = __DIR__ . '/data-current'; // a symlink, e.g. -> data-2026
$group = 'staff';
if (lchgrp($link, $group)) {
echo "Link group changed to {$group}.";
} else {
echo 'Could not change the link group.';
}Da lchgrp() auf den Link wirkt, ändert sich die Gruppe der Datei data-2026 nicht – nur der Symlink data-current wird geändert.
lchgrp() vs. chgrp()
Beide Funktionen teilen dieselbe Signatur, unterscheiden sich aber darin, worauf sie wirken:
<?php
// Acts on the LINK only:
lchgrp('/var/www/current', 'www-data');
// Follows the link and acts on the TARGET file/directory:
chgrp('/var/www/current', 'www-data');Verwenden Sie lchgrp(), wenn Sie gezielt die Metadaten des Symlinks ändern und die Eigentümerschaft des Ziels unverändert lassen möchten.
Rückgabewert, Berechtigungen und Plattformen
Ein Rückgabewert true bedeutet, dass die Änderung angewendet wurde. Mehrere Bedingungen führen zur Rückgabe von false (mit einer Warnung):
- Berechtigungen. Nur der Besitzer des Links (oder der Superuser) kann dessen Gruppe ändern, und der Benutzer muss Mitglied der Zielgruppe sein. Auf den meisten Systemen benötigt das Skript dafür effektiv
root-Rechte. - Der Pfad muss ein Symlink sein. Wenn
$filenameeine reguläre Datei ist oder nicht existiert, schlägt der Aufruf fehl. - Windows. Gruppeninhaberschaft ist ein POSIX-Konzept, daher wird
lchgrp()unter Windows nicht sinnvoll unterstützt.
Da Fehler in gemeinsam genutzten Umgebungen häufig auftreten, sollten Sie immer auf den Rückgabewert verzweigen, anstatt Erfolg vorauszusetzen. Um einen Link vor der Änderung zu prüfen, sind is_link() und readlink() nützliche Begleiter.
<?php
$link = '/var/www/current';
if (!is_link($link)) {
echo "{$link} is not a symbolic link.";
} elseif (lchgrp($link, 'www-data')) {
echo 'Group updated.';
} else {
echo 'Update failed — check ownership and group membership.';
}Fazit
lchgrp() ändert die Gruppe eines symbolischen Links, ohne ihm zum Ziel zu folgen – das symlink-bewusste Gegenstück zu chgrp() und das Gruppenäquivalent von lchown(). Die Funktion gibt true oder false zurück, erfordert entsprechende Eigentümerschaft und Gruppenmitgliedschaft und ist unter Windows wirkungslos. Prüfen Sie stets den Rückgabewert und bestätigen Sie mit is_link(), dass der Pfad ein Link ist, bevor Sie auf das Ergebnis vertrauen.