W3docs

lchgrp()

Функция lchgrp() в PHP изменяет группу символической ссылки, не затрагивая целевой файл. Синтаксис, параметры и примеры.

Функция PHP lchgrp() изменяет групповую принадлежность самой символической ссылки, а не файла, на который она указывает. На этой странице объясняется, что она делает, чем отличается от chgrp(), какие параметры принимает, что возвращает, а также правила разрешений и платформ, определяющие успех вызова.

Что такое функция lchgrp()?

Символическая ссылка (симлинк) — это небольшой файл, указывающий на другой путь. Большинство функций файловой системы «следуют» за ссылкой и работают с целевым объектом. lchgrp() является исключением: префикс l означает, что функция действует на узел самой ссылки, не затрагивая группу цели.

Это важно, когда ссылка и её цель принадлежат разным группам, или когда нужно управлять разрешениями ссылки, не изменяя файл, на который она ссылается. Для аналога, работающего с владельцем, см. lchown(); для версии, следующей за ссылкой, см. chgrp().

Синтаксис

lchgrp(string $filename, string|int $group): bool
ПараметрОписание
$filenameПуть к символической ссылке, группу которой нужно изменить.
$groupНовая группа — указывается как имя группы ('staff') или числовой GID (20).

Функция возвращает true при успехе и false при ошибке. В случае ошибки PHP также генерирует предупреждение E_WARNING.

Как использовать lchgrp()

Передайте путь к ссылке и целевую группу, затем проверьте булев результат:

<?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.';
}

Поскольку lchgrp() воздействует на ссылку, группа файла data-2026 не изменяется — меняется только символическая ссылка data-current.

lchgrp() vs chgrp()

Обе функции имеют одинаковую сигнатуру, но работают с разными объектами:

<?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');

Используйте lchgrp(), когда необходимо изменить метаданные именно символической ссылки и при этом оставить владельца целевого файла нетронутым.

Возвращаемое значение, разрешения и платформы

Возврат true означает, что изменение применено. Несколько условий приводят к возврату false (с предупреждением):

  • Разрешения. Изменить группу ссылки может только её владелец (или суперпользователь), причём пользователь должен быть членом целевой группы. На большинстве систем это означает, что скрипту фактически требуется доступ root.
  • Путь должен быть симлинком. Если $filename является обычным файлом или не существует, вызов завершится с ошибкой.
  • Windows. Групповая принадлежность — концепция POSIX, поэтому lchgrp() не поддерживается в Windows в значимом смысле.

Поскольку ошибки часты в общих окружениях, всегда проверяйте возвращаемое значение, не предполагая успех. Для проверки ссылки перед изменением полезны is_link() и readlink().

<?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.';
}

Заключение

lchgrp() изменяет группу символической ссылки, не следуя к цели — симлинк-ориентированный аналог chgrp() и групповой эквивалент lchown(). Функция возвращает true или false, требует соответствующих прав на владение и членства в группе и не работает на Windows. Всегда проверяйте возвращаемое значение и убедитесь, что путь является ссылкой с помощью is_link() перед использованием результата.

Практика

Практика
Что верно о функции 'lchgrp()' в PHP согласно информации на сайте w3docs.com?
Что верно о функции 'lchgrp()' в PHP согласно информации на сайте w3docs.com?
Was this page helpful?