Linkinfo: примеры (PHP)

Использование функции linkinfo для работы со ссылками
Раздел: Работа с файловой системой
linkinfo(string $path): int|false

Функция linkinfo в PHP

Назначение и описание

Функция linkinfo() возвращает информацию о ссылке. Она применяется для проверки существования и получения метаданных символической или жёсткой ссылки в файловой системе. Функция полезна в сценариях системного администрирования, мониторинга целостности файлов или валидации ссылок перед выполнением операций с ними.

Аргументы функции

Функция принимает один обязательный параметр:

  • path (string) — Путь к символической или жёсткой ссылке. Если путь указывает на обычный файл, функция также вернёт информацию, но это не является её основным предназначением.

Возвращаемое значение — целое число, представляющее тип ссылки или 0/-1 в случае ошибки (например, если ссылка не существует). Значения соответствуют константам, определённым в расширении stat.

Примеры использования linkinfo

Проверка существования ссылки
$link = 'symlink_to_file'; 
$info = linkinfo($link);
if ($info > 0) {
    echo "Ссылка существует. Тип: $info";
} else {
    echo "Ссылка не существует или произошла ошибка";
}
Ссылка существует. Тип: 12
Определение типа ссылки
$paths = ['regular_file.txt', 'hardlink', 'symlink'];
foreach ($paths as $path) {
    $info = linkinfo($path);
    echo "$path: $info\n";
}
regular_file.txt: 0
hardlink: 12
symlink: 12

Похожие функции в PHP

  • is_link() — Проверяет, является ли файл символической ссылкой. Возвращает логическое значение. Более проста для проверки типа файла.
  • lstat() — Возвращает информацию о файле или символической ссылке. Предоставляет детальную статистику, включая размер, время изменения и права доступа.
  • readlink() — Возвращает цель символической ссылки. Полезно для получения пути, на который указывает ссылка.
  • file_exists() — Проверяет существование файла или каталога, но не различает типы ссылок.

Выбор функции зависит от задачи: для простой проверки существования ссылки подходит is_link(), для получения детальной информации — lstat(), а для проверки существования без учёта типа — file_exists().

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

Проверка несуществующей ссылки
$info = linkinfo('non_existent_link');
if ($info === -1) {
    echo "Ошибка: ссылка не существует";
}
Ошибка: ссылка не существует
Использование без проверки прав доступа
$link = '/root/protected_link';
$info = linkinfo($link);
if ($info === 0) {
    echo "Нет доступа к ссылке или она не существует";
}
Нет доступа к ссылке или она не существует
Обработка обычных файлов
$info = linkinfo('regular_file.txt');
echo $info;
0

Функция возвращает 0 для обычных файлов, что может быть неверно истолковано как ошибка. Важно учитывать контекст использования.

Изменения в последних версиях PHP

В PHP 8.0 значительных изменений в работе функции linkinfo() не было. Однако, начиная с PHP 7.4, улучшена обработка ошибок для несуществующих путей — функция возвращает -1 вместо 0 в некоторых случаях. В более ранних версиях поведение могло отличаться в зависимости от операционной системы.

Расширенные примеры использования

Сравнение ссылок и оригинальных файлов
Пример php
$link = 'symlink_to_file';
$original = 'original_file.txt';
$linkInfo = linkinfo($link);
$originalInfo = linkinfo($original);
if ($linkInfo > 0 && $originalInfo > 0) {
    echo "Оба файла доступны. ";
    echo "Тип ссылки: $linkInfo, тип оригинала: $originalInfo";
}
Оба файла доступны. Тип ссылки: 12, тип оригинала: 0
Автоматизированная проверка целостности ссылок
Пример php
$links = ['link1', 'link2', 'link3'];
foreach ($links as $link) {
    if (linkinfo($link) > 0) {
        echo "$link: активна\n";
    } else {
        echo "$link: повреждена или отсутствует\n";
    }
}
link1: активна
link2: повреждена или отсутствует
link3: активна
Использование в комбинации с другими функциями
Пример php
$path = 'symlink';
if (is_link($path)) {
    echo "Это символическая ссылка. ";
    $target = readlink($path);
    echo "Она указывает на: $target";
} else {
    echo "Это не символическая ссылка";
}
Это символическая ссылка. Она указывает на: /path/to/original
Обработка ссылок в каталоге
Пример php
$dir = '/path/to/directory';
$files = scandir($dir);
foreach ($files as $file) {
    $fullPath = $dir . '/' . $file;
    if (linkinfo($fullPath) > 0) {
        echo "$file является ссылкой\n";
    }
}
link1 является ссылкой
link2 является ссылкой

Аналоги функции в других языках

Python
import os
path = 'symlink'
try:
    info = os.lstat(path)
    print(f"Информация о ссылке: {info}")
except FileNotFoundError:
    print("Ссылка не найдена")
Информация о ссылке: os.stat_result(st_mode=41471, ...)

В Python используется функция os.lstat(), которая возвращает объект stat с детальной информацией о ссылке, включая её тип и метаданные.

JavaScript (Node.js)
const fs = require('fs');
const path = 'symlink';
fs.lstat(path, (err, stats) => {
    if (err) console.log('Ошибка:', err);
    else console.log(`Это символическая ссылка: ${stats.isSymbolicLink()}`);
});
Это символическая ссылка: true

В Node.js функция fs.lstat() предоставляет информацию о ссылке, включая проверку на тип через метод isSymbolicLink().

MySQL

В MySQL нет прямой аналогии, так как это СУБД, а не язык для работы с файловой системой.

PHP linkinfo function comments

En
Linkinfo Gets information about a link