Readlink: примеры (PHP)
readlink(string $path): string|falseОписание функции readlink
Функция readlink() в PHP возвращает цель символической ссылки. Она применяется для получения пути, на который указывает символьная ссылка в файловой системе.
Функция принимает один обязательный параметр:
- path (string) - путь к символической ссылке, которую требуется прочитать.
Возвращаемое значение: строка с путем назначения символической ссылки или false в случае ошибки.
Простые примеры использования
Чтение символической ссылки:
$link = '/var/www/html/link_to_config';
$target = readlink($link);
echo $target;/etc/nginx/sites-available/config.conf
Когда ссылка не существует:
$result = readlink('/nonexistent/link');
if ($result === false) {
echo 'Символическая ссылка не найдена или недоступна';
}Символическая ссылка не найдена или недоступна
Похожие функции в PHP
Проверяет, является ли файл символической ссылкой. Лучше использовать перед readlink() для избежания ошибок.
Создает символическую ссылку. Является обратной операцией к readlink().
Возвращает информацию о ссылке. Может использоваться для получения данных о существовании ссылки без чтения ее цели.
Типичные ошибки
Попытка применить функцию к обычному файлу:
$result = readlink('/etc/passwd');
var_dump($result);bool(false)
Недостаточные разрешения для чтения ссылки:
// При отсутствии прав на чтение
$target = readlink('/root/secret_link');
if ($target === false) {
echo 'Ошибка доступа к символической ссылке';
}Изменения в версиях PHP
В PHP 8.0 функция не претерпела значительных изменений. Сохраняется обратная совместимость с предыдущими версиями. В PHP 8.1 улучшены сообщения об ошибках файловой системы, что косвенно затрагивает и работу readlink().
Расширенные примеры
Функция для получения конечной цели цепочки символических ссылок:
function resolveLink($path) {
while (is_link($path)) {
$path = readlink($path);
}
return $path;
}
echo resolveLink('/var/www/link1');Символическая ссылка может содержать относительный путь:
// Если link2 указывает на '../dir/file.txt'
$target = readlink('link2');
echo realpath(dirname('link2') . '/' . $target);Проверка текущей активной версии через символическую ссылку:
$currentVersion = readlink('/var/www/current');
if ($currentVersion !== false) {
echo 'Текущая версия: ' . basename($currentVersion);
}Определение, указывает ли ссылка на конкретный каталог:
$linkTarget = readlink('/var/www/shared_storage');
if (realpath($linkTarget) === realpath('/mnt/network/storage')) {
echo 'Ссылка ведет на сетевое хранилище';
}Аналоги в других языках
Readlink в Python
Функция os.readlink() выполняет аналогичную задачу:
import os
target = os.readlink('/path/to/link')
print(target)Асинхронный метод fs.readlink():
const fs = require('fs');
fs.readlink('/path/to/link', (err, target) => {
console.log(target);
});Команда readlink в терминале:
readlink -f /path/to/link