当前位置: 首页> 最新文章列表> 使用 PHP realpath 获取文件夹的绝对路径

使用 PHP realpath 获取文件夹的绝对路径

gitbox 2025-06-07

realpath() 函数简介

realpath() 函数的基本语法如下:

string realpath(string $path)
  • $path:要解析的路径。

  • 返回值:成功时返回规范化的绝对路径;失败时返回 false

使用示例

以下是一个获取当前目录下某个文件夹的绝对路径的基本示例:

$relativePath = 'uploads/images';
$absolutePath = realpath($relativePath);

if ($absolutePath !== false) {
    echo "绝对路径是: $absolutePath";
} else {
    echo "路径不存在或无法解析。";
}

注意事项

1. 目标路径必须存在

realpath() 只能解析实际存在的路径。如果你传入的路径在文件系统中不存在,该函数将返回 false。因此在使用时,建议先判断路径是否存在:

if (file_exists($relativePath)) {
    $real = realpath($relativePath);
    echo $real;
} else {
    echo "路径不存在";
}

2. 符号链接和路径规范化

realpath() 会解析符号链接,并将路径中如 ... 之类的符号消除。例如:

$path = '../project/./uploads/../logs';
echo realpath($path);

该调用将返回 project/logs 的绝对路径。

3. 与 URL 路径的区别

需要注意的是,realpath() 是基于服务器文件系统的路径解析工具,而不是针对 URL 的工具。如果你处理的是 URL,比如 https://gitbox.net/uploads/images,那么这并不能通过 realpath() 来解析。你应该只对服务器文件路径使用它:

$serverPath = $_SERVER['DOCUMENT_ROOT'] . '/uploads/images';
$real = realpath($serverPath);

此处我们拼接的路径会解析为类似:

/var/www/html/uploads/images

而不是:

https://gitbox.net/uploads/images

4. 使用 realpath() 提高安全性

在处理用户上传的路径参数时,realpath() 可作为一种安全防护机制,用于判断路径是否越界。例如:

$userPath = $_GET['path'];
$baseDir = realpath('/var/www/gitbox/uploads');

$fullPath = realpath($baseDir . '/' . $userPath);

if (strpos($fullPath, $baseDir) === 0) {
    echo "安全路径: $fullPath";
} else {
    echo "非法访问路径被拦截。";
}

该方法可防止用户通过类似 ../../../etc/passwd 的路径来访问服务器敏感文件。