W3docs

lchgrp()

Die PHP-Funktion lchgrp() ändert die Gruppeninhaber­schaft eines symbolischen Links selbst, nicht die der Zieldatei. Ähnlich wie chgrp().

Die PHP-Funktion lchgrp() ändert die Gruppeninhaber­schaft 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
ParameterBeschreibung
$filenamePfad zum symbolischen Link, dessen Gruppe geändert werden soll.
$groupDie 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 $filename eine reguläre Datei ist oder nicht existiert, schlägt der Aufruf fehl.
  • Windows. Gruppeninhaber­schaft 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.

Übungen

Übung
Was trifft auf die Funktion 'lchgrp()' in PHP zu?
Was trifft auf die Funktion 'lchgrp()' in PHP zu?
Was this page helpful?