W3docs

linkinfo()

Функция linkinfo() в PHP возвращает информацию о жёсткой ссылке и позволяет проверить её существование через поле st_dev структуры lstat().

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

Функция linkinfo() — это встроенная функция PHP, которая проверяет, существует ли ссылка, и в Unix-системах возвращает устройство, на котором она расположена. Конкретно она возвращает поле st_dev из структуры C stat, которую формирует системный вызов lstat() — целое число, идентифицирующее устройство (диск/раздел), где хранится ссылка.

На практике linkinfo() наиболее полезна как быстрая проверка существования: если функция возвращает 0 или положительное целое число, ссылка существует; если возвращает -1 или false — путь отсутствует, ссылка неактивна или недоступна. Несмотря на название, функция не возвращает количество жёстких ссылок — эту информацию можно получить из элемента nlink функций stat() или lstat().

На этой странице описаны синтаксис функции, возвращаемые значения, работающий пример, типичные ошибки и связанные функции файловой системы.

Синтаксис

linkinfo(string $path): int|false

Функция принимает единственный параметр:

  • $path — путь к символической или жёсткой ссылке, которую нужно проверить.

Функция возвращает:

  • неотрицательное целое число (идентификатор устройства st_dev), если ссылка существует,
  • -1, если ссылку не удаётся прочитать, но lstat частично завершается успешно, или
  • false, если $path не существует или недоступен.

Поскольку 0 является допустимым возвращаемым значением, которое некоторые платформы могут расценить как «ложное», всегда используйте сравнение !== false вместо простой проверки булева значения.

Как использовать функцию linkinfo()

Выполните следующие шаги:

  1. Укажите путь к символической или жёсткой ссылке, которую нужно проверить.
  2. Вызовите linkinfo(), передав путь в качестве аргумента.
  3. Сравните результат строго с false, чтобы определить, существует ли ссылка.

В примере ниже создаётся реальный файл и символическая ссылка на него, после чего ссылка проверяется с помощью linkinfo():

<?php

// Set up a file and a symbolic link to it in the temp directory.
$target = tempnam(sys_get_temp_dir(), 'tgt');
$link   = sys_get_temp_dir() . '/example_link';

@unlink($link);            // remove a leftover link from a previous run
symlink($target, $link);   // create the symlink

$info = linkinfo($link);

if ($info !== false) {
    echo "The link '$link' exists. Device id (st_dev): $info" . PHP_EOL;
} else {
    echo "The link '$link' does not exist or is inaccessible." . PHP_EOL;
}

// A path that doesn't exist fails: false on most systems, -1 on some
// Unix builds (a warning may also be emitted), so treat both as "missing".
$missing = @linkinfo('/no/such/link');
var_dump($missing === false || $missing === -1); // bool(true) -> "missing"

// Clean up.
unlink($link);
unlink($target);

При типичном запуске выводится что-то вроде:

The link '/tmp/example_link' exists. Device id (st_dev): 16777220
bool(true)

Конкретный идентификатор устройства зависит от вашей операционной системы и файловой системы, поэтому не следует его жёстко прописывать — важно лишь его наличие. Для несуществующего пути PHP возвращает false на большинстве платформ и -1 на некоторых Unix-сборках, именно поэтому в примере оба значения обрабатываются как «не найдено».

Типичные ошибки

  • Windows. Функция linkinfo() не имеет смысла в Windows и фактически лишь сообщает, является ли путь ссылкой. Используйте её только для проверки существования, но не для получения номера устройства.
  • Используйте !== false, а не !$info. На некоторых системах действительная ссылка возвращает 0, и свободная проверка расценит это как «отсутствует».
  • Функция не следует по ссылке. linkinfo() проверяет саму ссылку (как lstat), а не файл, на который она указывает. Символическая ссылка на удалённый файл по-прежнему будет считаться существующей.
  • Не для подсчёта жёстких ссылок. Если нужно узнать количество жёстких ссылок, используйте stat($path)['nlink'].

Связанные функции

  • symlink() — создать символическую ссылку.
  • link() — создать жёсткую ссылку.
  • readlink() — вернуть цель, на которую указывает символическая ссылка.
  • is_link() — проверить, является ли путь символической ссылкой.
  • lstat() — получить полную информацию о ссылке без её разыменования.

Заключение

Функция linkinfo() — это лёгкий способ убедиться в существовании ссылки и получить идентификатор устройства, на котором она хранится, отражая поле st_dev функции lstat(). Используйте её для проверки существования (всегда со строгим сравнением !== false), а для получения более подробной информации, например количества жёстких ссылок или типа ссылки, обращайтесь к stat() или is_link().

Practice

Практика
Что делает функция linkinfo() в PHP?
Что делает функция linkinfo() в PHP?
Was this page helpful?