realpath() 函数返回规范化的绝对路径名。它会解析所有符号链接,处理路径中的 ./、../ 和多余的 /,并返回最终的绝对路径。
这个函数在需要获取文件或目录的绝对路径时非常有用,特别是在处理相对路径或包含符号链接的路径时。
realpath ( string $path ) : string|false
| 参数 | 描述 |
|---|---|
path |
要检查的路径。必需参数。可以是相对路径或绝对路径。 |
false,通常是当:
path 参数指定的文件不存在falserealpath() 仍然能够解析路径,返回一个有效的绝对路径。
将相对路径转换为绝对路径:
<?php
// 假设当前工作目录是 /var/www/html
$relative_path = './uploads/file.txt';
$absolute_path = realpath($relative_path);
if ($absolute_path !== false) {
echo "相对路径: {$relative_path}<br>";
echo "绝对路径: {$absolute_path}";
} else {
echo "文件不存在或无法访问";
}
?>
可能的输出:
相对路径: ./uploads/file.txt
绝对路径: /var/www/html/uploads/file.txt
realpath() 会解析路径中的 ..:
<?php
// 假设当前目录是 /var/www/html/test
$path = '../uploads/../config/config.php';
$real_path = realpath($path);
if ($real_path !== false) {
echo "原始路径: {$path}<br>";
echo "规范路径: {$real_path}";
} else {
echo "路径无效";
}
?>
可能的输出:
原始路径: ../uploads/../config/config.php
规范路径: /var/www/html/config/config.php
realpath() 会解析符号链接:
<?php
// 假设 /var/www/html/current 是一个指向 /var/www/html/releases/v1.0 的符号链接
$link_path = '/var/www/html/current/config.php';
$real_path = realpath($link_path);
if ($real_path !== false) {
echo "符号链接路径: {$link_path}<br>";
echo "实际路径: {$real_path}";
} else {
echo "路径无效";
}
?>
可能的输出:
符号链接路径: /var/www/html/current/config.php
实际路径: /var/www/html/releases/v1.0/config.php
处理不存在的路径:
<?php
$paths = [
'existing_file.txt',
'non_existing_file.txt',
'/tmp',
'/nonexistent/directory'
];
foreach ($paths as $path) {
$real = realpath($path);
if ($real !== false) {
echo "✓ '{$path}' 的绝对路径是: {$real}<br>";
} else {
echo "✗ 无法获取 '{$path}' 的绝对路径<br>";
}
}
?>
realpath() 会缓存解析后的路径。使用 clearstatcache() 清除缓存以获得最新结果.、.. 和多余的斜杠realpath() 也可能返回一个路径(前提是路径中的目录都存在且有权限)false<?php
// 第一次调用
echo "第一次: " . realpath('/path/to/file') . "<br>";
// 假设文件被移动或删除
// 需要清除缓存才能获得最新结果
clearstatcache();
// 第二次调用
echo "清除缓存后: " . realpath('/path/to/file');
?>