PHP dirname功能及原理实例解析

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,这就是我们想要的目录部分。

后端开发标签