pathinfo

(PHP 4 >= 4.0.3, PHP 5, PHP 7, PHP 8)

pathinfo返回有关文件路径的信息

描述

pathinfo(string $path, int $flags = PATHINFO_ALL): array|string

pathinfo() 返回有关 path 的信息:关联数组或字符串,取决于 flags

注意:

有关检索当前路径信息的详细信息,请阅读有关 预定义保留变量 的部分。

注意:

pathinfo() 对输入字符串进行简单的操作,不了解实际的文件系统或路径组件,如 ".."。

注意:

仅在 Windows 系统上,\ 字符将被解释为目录分隔符。在其他系统上,它将被视为任何其他字符。

注意

pathinfo() 依赖于区域设置,因此为了使其能够正确解析包含多字节字符的路径,必须使用 setlocale() 函数设置匹配的区域设置。

参数

path

要解析的路径。

flags

如果存在,指定要返回的特定元素;一个是 PATHINFO_DIRNAMEPATHINFO_BASENAMEPATHINFO_EXTENSIONPATHINFO_FILENAME

如果未指定 flags,则返回所有可用元素。

返回值

如果未传递 flags 参数,则返回一个关联 array,其中包含以下元素:dirnamebasenameextension(如果有)和 filename

注意:

如果 path 具有多个扩展名,则 PATHINFO_EXTENSION 仅返回最后一个扩展名,而 PATHINFO_FILENAME 仅剥离最后一个扩展名。(参见下面的第一个示例)。

注意:

如果 path 没有扩展名,则不会返回 extension 元素。(参见下面的第二个示例)。

注意:

如果 pathbasename 以句点开头,则以下字符将被解释为 extension,并且 filename 为空。(参见下面的第三个示例)。

如果存在 flags,则返回一个 string,其中包含请求的元素。

示例

示例 #1 pathinfo() 示例

<?php
$path_parts
= pathinfo('/www/htdocs/inc/lib.inc.php');

echo
$path_parts['dirname'], "\n";
echo
$path_parts['basename'], "\n";
echo
$path_parts['extension'], "\n";
echo
$path_parts['filename'], "\n";
?>

上面的示例将输出

/www/htdocs/inc
lib.inc.php
php
lib.inc

示例 #2 pathinfo() 示例,显示空值和无扩展名之间的区别

<?php
$path_parts
= pathinfo('/path/emptyextension.');
var_dump($path_parts['extension']);

$path_parts = pathinfo('/path/noextension');
var_dump($path_parts['extension']);
?>

上面的示例将输出类似于

string(0) ""

Notice: Undefined index: extension in test.php on line 6
NULL

示例 #3 pathinfo() 用于点文件的示例

<?php
print_r
(pathinfo('/some/path/.test'));
?>

上面的示例将输出类似于

Array
(
    [dirname] => /some/path
    [basename] => .test
    [extension] => test
    [filename] =>
)

示例 #4 pathinfo() 使用数组解构的示例

flags 参数不是位掩码。只能提供一个值。要仅选择解析值的有限集,请使用如下数组解构

<?php
['basename' => $basename, 'dirname' => $dirname] = pathinfo('/www/htdocs/inc/lib.inc.php');

var_dump($basename, $dirname);
?>

上面的示例将输出类似于

string(11) "lib.inc.php"
string(15) "/www/htdocs/inc"

另请参阅

添加备注

用户贡献的备注 4 条备注

41
Lori
5 年前
pathinfo 和 PHP 7 中数组解构的简单示例
<?php
[ 'basename' => $basename, 'dirname' => $dirname ] = pathinfo('/www/htdocs/inc/lib.inc.php');

var_dump($basename, $dirname);

// 结果:
// string(11) "lib.inc.php"
// string(15) "/www/htdocs/inc"
?>
7
urvi
2 年前
关于路径,您需要注意一件事
在 Windows 上,斜杠 (/) 和反斜杠 (\) 都用作目录分隔符字符。在其他环境中,它是正斜杠 (/)。(此解释来自 basename() 函数部分 https://php.net/manual/en/function.basename.php)
示例
<?php
$path
= "https://urvidutta.com /a\b\c\filename.pdf";

echo
pathinfo($pdfUrl, PATHINFO_BASENAME); // 获取 basename
// 输出
// 在窗口上:结果是 filename.pdf
// 在 Linux 上:结果是 a\b\c\filename.pdf(这可能不是您期望的)

// 因此,为了在不同的系统上获得相同的结果。我会先做以下操作。
$path = str_replace($path, '\\', '/'); // 将 '\' 转换为 '/'
?>
13
Pietro Baricco
12 年前
将此函数用作 pathinfo 的替代,使其也适用于使用 UTF-8 编码的文件名

<?php
function mb_pathinfo($filepath) {
preg_match('%^(.*?)[\\\\/]*(([^/\\\\]*?)(\.([^\.\\\\/]+?)|))[\\\\/\.]*$%im',$filepath,$m);
if(
$m[1]) $ret['dirname']=$m[1];
if(
$m[2]) $ret['basename']=$m[2];
if(
$m[5]) $ret['extension']=$m[5];
if(
$m[3]) $ret['filename']=$m[3];
return
$ret;
}
?>
11
n0dalus
19 年前
如果一个文件有多个“文件扩展名”(用点号分隔),则返回最后一个扩展名。
例如
<?php
$pathinfo
= pathinfo('/dir/test.tar.gz');
echo
'Extension: '.$pathinfo['extension'];
?>
将生成
Extension: gz

而不是 tar.gz
To Top