pathinfo
(PHP 4 >= 4.0.3, PHP 5, PHP 7, PHP 8)
pathinfo — 返回文件路径的信息
说明
pathinfo() 返回一个关联数组包含有 path
的信息。返回关联数组还是字符串取决于 flags
。
注意:
有关取得当前路径信息的说明,请阅读 预定义变量 一节。
注意:
pathinfo() 纯粹基于输入字符串操作, 它不会受实际文件系统和类似 "
..
" 的路径格式影响。
注意:
反斜线字符
\
仅在 Windows 系统上会解释为目录分隔符。在其他系统上,它将视为普通字符。
pathinfo() 是本地化的,所以为了让它能正确地解析一个包含多字节编码的路径, 必须使用 setlocale() 函数来设置地区信息。
参数
path
-
要解析的路径。
flags
-
如果指定了,将会返回指定元素;它们包括:
PATHINFO_DIRNAME
、PATHINFO_BASENAME
、PATHINFO_EXTENSION
、PATHINFO_FILENAME
。如果没有指定
flags
默认是返回全部的单元。
返回值
如果没有传入 options
,将会返回包括以下单元的数组 array:dirname
,basename
和 extension
(如果有),以及filename
。
注意:
如果
path
有一个以上的扩展名,PATHINFO_EXTENSION
只返回最后一个,而PATHINFO_FILENAME
仅剥离最后一个。 (参考第一个示例)。
注意:
如果
path
没有扩展名,返回数据中就不会有extension
元素。(参考第二个示例)
注意:
如果
path
中的basename
以点开始, 那后面的字符串将被解释为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() 形如 .file 的示例
<?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"
参见
- dirname() - 返回路径中的目录部分
- basename() - 返回路径中的文件名部分
- parse_url() - 解析 URL,返回其组成部分
- realpath() - 返回规范化的绝对路径名
用户贡献的备注 3 notes
Use this function in place of pathinfo to make it work with UTF-8 encoded file names too
<?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;
}
?>
about the path, there are one thing you should note :
On Windows, both slash (/) and backslash (\) are used as directory separator character. In other environments, it is the forward slash (/). (this explain is from basename() function part https://www.php.net/manual/en/function.basename.php)
example:
<?php
$path = "https://urvidutta.com /a\b\c\filename.pdf";
echo pathinfo($pdfUrl, PATHINFO_BASENAME); //get basename
//output
//on window: result is filename.pdf
//on Linux: result is a\b\c\filename.pdf (that is may not your expect)
//so in order to get same result in different system. i will do below first.
$path = str_replace($path, '\\', '/'); //convert '\' to '/'
?>