PHP readlink() 函数

定义和用法

readlink() 函数返回符号连接(symbolic link)的目标。如果参数不是符号链接,则函数返回 false

这个函数在PHP文件系统操作中非常有用,特别是在需要获取软链接实际指向的路径时。

语法

readlink ( string $path ) : string|false

参数

参数 描述
path 符号链接的路径。必需参数。

返回值

  • 成功时:返回符号链接的目标路径(字符串)
  • 失败时:返回 false,通常是当:
    • path 参数不是有效的符号链接
    • 文件不存在
    • 没有读取权限

示例

示例 1:基本用法

获取符号链接的目标路径:

<?php
// 假设有一个符号链接 link_to_file 指向 /path/to/original.txt
$target = readlink('link_to_file');

if ($target !== false) {
    echo "符号链接指向: " . $target;
} else {
    echo "读取符号链接失败或不是符号链接";
}
?>
示例 2:检查并处理结果

更完整的错误处理示例:

<?php
$link = 'my_symbolic_link';

if (is_link($link)) {
    $target = readlink($link);

    if ($target !== false) {
        echo "符号链接 '{$link}' 指向: {$target}";

        // 检查目标文件是否存在
        if (file_exists($target)) {
            echo " <span class='text-success'>(目标文件存在)</span>";
        } else {
            echo " <span class='text-danger'>(目标文件不存在)</span>";
        }
    } else {
        echo "无法读取符号链接内容";
    }
} else {
    echo "'{$link}' 不是符号链接或不存在";
}
?>
示例 3:结合其他函数使用

获取目录中所有符号链接的目标:

<?php
$directory = '/path/to/directory';

// 扫描目录
$files = scandir($directory);

foreach ($files as $file) {
    if ($file === '.' || $file === '..') continue;

    $fullPath = $directory . '/' . $file;

    if (is_link($fullPath)) {
        $target = readlink($fullPath);
        echo "符号链接: {$file} → {$target}<br>";
    }
}
?>

注意事项

重要提示
  • readlink() 仅适用于符号链接,对于硬链接或普通文件将返回 false
  • 使用前最好先用 is_link() 函数检查是否为符号链接
  • 返回的路径可能是相对路径或绝对路径,取决于符号链接创建时的方式
  • 在Windows系统中,符号链接功能需要适当权限和Windows版本支持
  • 如果符号链接指向的目标已被删除或移动,函数仍会返回原始路径字符串