如何确定文件路径是绝对的?

时间:2014-05-09 17:04:21

标签: php linux windows path

如何确定文件路径是否绝对?必须适用于Windows和Linux。

2 个答案:

答案 0 :(得分:5)

在这里,我尝试使用单个函数:

function isAbsolutePath($path) {
    if (!is_string($path)) {
        $mess = sprintf('String expected but was given %s', gettype($path));
        throw new \InvalidArgumentException($mess);
    }
    if (!ctype_print($path)) {
       $mess = 'Path can NOT have non-printable characters or be empty';
       throw new \DomainException($mess);
    }
    // Optional wrapper(s).
    $regExp = '%^(?<wrappers>(?:[[:print:]]{2,}://)*)';
    // Optional root prefix.
    $regExp .= '(?<root>(?:[[:alpha:]]:/|/)?)';
    // Actual path.
    $regExp .= '(?<path>(?:[[:print:]]*))$%';
    $parts = [];
    if (!preg_match($regExp, $path, $parts)) {
        $mess = sprintf('Path is NOT valid, was given %s', $path);
        throw new \DomainException($mess);
    }
    if ('' !== $parts['root']) {
        return true;
    }
    return false;
}

我从我的一个项目中获取了这个,你在使用文件和路径时可能会觉得很有用: dragonrun1/file_path_normalizer

答案 1 :(得分:3)

以下是我的想法:

function is_absolute_path($path) {
    if($path === null || $path === '') throw new Exception("Empty path");
    return $path[0] === DIRECTORY_SEPARATOR || preg_match('~\A[A-Z]:(?![^/\\\\])~i',$path) > 0;
}

我认为这涵盖了Windows的所有possible根路径。