Linkinfo: примеры (PHP)
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 в некоторых случаях. В более ранних версиях поведение могло отличаться в зависимости от операционной системы.
Расширенные примеры использования
$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
$links = ['link1', 'link2', 'link3'];
foreach ($links as $link) {
if (linkinfo($link) > 0) {
echo "$link: активна\n";
} else {
echo "$link: повреждена или отсутствует\n";
}
}link1: активна link2: повреждена или отсутствует link3: активна
$path = 'symlink';
if (is_link($path)) {
echo "Это символическая ссылка. ";
$target = readlink($path);
echo "Она указывает на: $target";
} else {
echo "Это не символическая ссылка";
}Это символическая ссылка. Она указывает на: /path/to/original
$dir = '/path/to/directory';
$files = scandir($dir);
foreach ($files as $file) {
$fullPath = $dir . '/' . $file;
if (linkinfo($fullPath) > 0) {
echo "$file является ссылкой\n";
}
}link1 является ссылкой link2 является ссылкой
Аналоги функции в других языках
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 с детальной информацией о ссылке, включая её тип и метаданные.
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 нет прямой аналогии, так как это СУБД, а не язык для работы с файловой системой.