PHP Conference Japan 2024

SplFileInfo::getBasename

(PHP 5 >= 5.2.2, PHP 7, PHP 8)

SplFileInfo::getBasename获取文件的基名

描述

public SplFileInfo::getBasename(string $suffix = ""): string

此方法返回文件、目录或链接的基名(不包含路径信息)。

警告

SplFileInfo::getBasename() 考虑区域设置,因此,为了使其能够正确识别包含多字节字符路径的基名,必须使用 setlocale() 函数设置匹配的区域设置。

参数

suffix

可选的后缀,用于从返回的基名中省略。

返回值

返回不包含路径信息的基名。

范例

示例 #1 SplFileInfo::getBasename() 例子

<?php
$info
= new SplFileInfo('file.txt');
var_dump($info->getBasename());

$info = new SplFileInfo('/path/to/file.txt');
var_dump($info->getBasename());

$info = new SplFileInfo('/path/to/file.txt');
var_dump($info->getBasename('.txt'));
?>

以上示例将输出类似以下内容

string(8) "file.txt"
string(8) "file.txt"
string(4) "file"

参见

添加备注

用户贡献的备注 3 条备注

33
adam dot schubert at sg1-game dot net
8 年前
如果您只想获取文件名而不使用奇怪的

<?php
pathinfo
($file->getBasename(), PATHINFO_FILENAME);
?>

您可以使用(也很奇怪,但看起来更好)

<?php
$file
->getBasename('.'.$file->getExtension());
?>

PS:为什么有 getFilename?当它返回与 getBasename 相同的东西时?我必须做这个丑陋的东西^而不是简单的 getFilename...
9
schuyler dot bos at gmail dot com
7 年前
同意,这太傻了。为什么不使 getFileName() 只返回不带扩展名的字符串。然后,将有一种方法可以返回所有不同的排列,而无需进行奇怪的编码。

getBaseName()
getExtention()
getFileName()

虽然由于命名法,让 getBaseName() 返回不带扩展名的文件名更有意义,因为 getFileName() 有点暗示它带有文件扩展名。
3
glen at pld-linux dot org
6 年前
与 basename 类似,如果文件名以非 ASCII 字符开头且区域设置未设置为匹配的字符集,此方法也会出现损坏

$ LC_ALL=C php -r 'var_dump(basename("ämb.er")); $fi = new SplFileInfo("äm.ber"); var_dump($fi->getBasename());';
string(5) "mb.er"
string(5) "m.ber"

$ LC_ALL=en_US.UTF-8 php -r 'var_dump(basename("ämb.er")); $fi = new SplFileInfo("äm.ber"); var_dump($fi->getBasename());';
string(7) "ämb.er"
string(7) "äm.ber"
To Top