SPLFileInfo:获取不带扩展名的文件名

17

我正在访问 SPLFileInfo 对象中的多个文件。我知道如何获取文件的路径、文件名,甚至扩展名。有没有办法获取不带扩展名的文件名?这是我一直在使用的代码,但我希望能得到更优雅的解决方案。是否有现成的解决方案?

$file = new SplFileInfo("path/to/file.txt.zip"); 

echo 'basename: '.$file->getBasename();  
echo PHP_EOL;
echo 'filename: '.$file->getFilename();
echo PHP_EOL;    
echo 'extension: '.$file->getExtension();
echo PHP_EOL;    
echo 'basename w/o extension: '.$file->getBasename('.'.$file->getExtension());

>>OUTPUT
>>basename: file.txt.zip
>>filename: file.txt.zip
>>extension: zip
>>basename w/o extension: file.txt
2个回答

30

我来晚了,所有感谢应该归功于@salathe是第一个帮助原帖作者的人,但这里是basename函数的PHP手册链接。基本上,您获取扩展名,然后在前面加上一个点.,最后使用basename函数获取名称,就像这样:

$file->getBasename('.' . $file->getExtension())

为了快速阅读,这里是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" 

这个设计真是让人困惑不已。 - Robo Robok
抱歉我迟到了:有什么让你感到困惑的地方吗? - undefined
它需要后缀以便能够返回没有扩展名的文件名。 - undefined

-1

11
$file->getBasename('.' . $file->getExtension()) 是正确的做法,不需要使用正则表达式。 - salathe
1
@salathe 把这个作为答案提交,因为这是这个问题的正确答案。+1 - crmpicco
@crmpicco 我也认为这是我能想到的最好方案了(仔细阅读原帖)。我希望能有更直接和优雅的解决方案。 - tzvi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接