1. PHP dirname功能及原理
dirname()
函数返回文件路径中的目录部分。
在 Windows 下以 "\"(反斜杠)作为目录分隔符,而在 Unix 下则以 "/"(正斜杠)作为目录分隔符。
例如:
$path = "/home/flyott/Downloads/php-7.0.33.tar.gz";
echo dirname($path);
// 输出:/home/flyott/Downloads
1.1 参数说明
这个函数只接受一个参数:
path
: 必需。规定要检查路径的路径。
1.2 整体分析
dirname()
只有一个参数,是个字符串类型,它返回这个字符串最后一个路径分隔符之前的部分。
1.3 算法分析
dirname()
开始处理后,首先执行以下几步扫描:
去掉结尾的斜线或反斜线。
截取最后一个到第一个目录分隔符之间的字符串。
结果为纯目录路径,不包含结尾的反斜杠或目录分隔符。
以下是 dirname()
的源代码:
function dirname($path) {
$len = strlen($path);
$pos = strrpos($path, '/');
if (!$pos && ($path[0] != '/')) { // 没有找到 '/' 且第一个字符不是 '/'
return ".";
}
if (($pos === false) || ($pos === 0)) { // 没有找到 '/' 或第一个字符是 '/'
return "/";
}
return substr($path, 0, $pos);
}
1.4 示例分析
接下来我们通过一个例子,来进一步理解 dirname()
函数的使用。
$path = "/home/flyott/Downloads/php-7.0.33.tar.gz";
echo dirname($path);
这里我们有一个名为 /home/flyott/Downloads/php-7.0.33.tar.gz
的文件路径,我们想要获取这个文件的目录部分。
执行 dirname()
函数后,函数开始处理,首先去掉结尾的斜线或反斜线: /home/flyott/Downloads/php-7.0.33.tar.gz
变成了 /home/flyott/Downloads/php-7.0.33.tar.gz
。
接下来截取最后一个到第一个目录分隔符之间的字符串,最后一个目录分隔符在字符串的 20 位置,所以我们截取的是从 0 到 19 的子字符串: /home/flyott/Downloads
。
函数返回 /home/flyott/Downloads
,这就是我们想要的目录部分。