假设我有一个路径:images/alphabet/abc/23345.jpg
如何从路径中删除文件名,以便得到:images/aphabet/abc/
假设我有一个路径:images/alphabet/abc/23345.jpg
如何从路径中删除文件名,以便得到:images/aphabet/abc/
您需要使用dirname()
函数
dirname()
只会返回父文件夹的名称,因此在dirname()
无法处理时,pathinfo()
却可以。
如果需要获取完整路径信息,应使用 pathinfo()
函数:
$dirname = pathinfo('images/alphabet/abc/23345.jpg', PATHINFO_DIRNAME);
PATHINFO_DIRNAME
告诉 pathinfo
直接返回 dirname
。
看一些例子:
对于路径 images/alphabet/abc/23345.jpg
,两种方式都可以:
<?php
$dirname = dirname('images/alphabet/abc/23345.jpg');
// $dirname === 'images/alphabet/abc/'
$dirname = pathinfo('images/alphabet/abc/23345.jpg', PATHINFO_DIRNAME);
// $dirname === 'images/alphabet/abc/'
对于路径images/alphabet/abc/
,如果dirname
失败:
<?php
$dirname = dirname('images/alphabet/abc/');
// $dirname === 'images/alphabet/'
$dirname = pathinfo('images/alphabet/abc/', PATHINFO_DIRNAME);
// $dirname === 'images/alphabet/abc/'
dirname()
和 pathinfo()
总是返回没有结尾斜杠的路径。至少在 PHP 8.0 中,dirname()
和 pathinfo()
给出了相同的结果。对于 'images/alphabet/abc/'
,这两个函数都返回 "images/alphabet"
。因此当前它们之间没有区别。 - Paul Melekhov<?php
$path = pathinfo('images/alphabet/abc/23345.jpg');
echo $path['dirname'];
?>
"test.txt"
)时,dirname()
和pathinfo()
函数返回单个点("."
)作为目录,而不是空字符串。如果你的字符串以"/"
结尾,即当一个字符串仅包含路径而没有文件名时,这些函数会忽略此结束斜杠并返回父目录。在某些情况下,这可能是不希望的行为,您需要使用其他方法。例如,如果您的路径可能只包含正斜杠"/"
,即仅有一种变体(不是正斜杠"/"
和反斜杠"\"
都有),则可以使用此函数:function stripFileName(string $path): string
{
if (($pos = strrpos($path, '/')) !== false) {
return substr($path, 0, $pos);
} else {
return '';
}
}
或者用更简短但不那么清晰的方式:
function stripFileName(string $path): string
{
return substr($path, 0, (int) strrpos($path, '/'));
}