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"
?>
(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
,则返回所有可用元素。
如果未传递 flags
参数,则返回一个关联 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() 用于点文件的示例
<?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"
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"
?>
关于路径,您需要注意一件事
在 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, '\\', '/'); // 将 '\' 转换为 '/'
?>
将此函数用作 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;
}
?>