SPLFileInfo: получить имя файла без расширения

Я обращаюсь к ряду файлов в объекте 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

person tzvi    schedule 11.03.2015    source источник


Ответы (2)


Я опаздываю, и все заслуги должны принадлежать @sala, который первым помог ОП, но вот ссылка на руководство по 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" 
person Erenor Paz    schedule 19.12.2015

Я не смог найти ничего официального, такого как .net - Path.GetFileNameWithoutExtension https://msdn.microsoft.com/en-us/library/system.io.path.getfilenamewithoutextension%28v=vs.110%29.aspx

Вот что я использую вместо этого preg_replace("/.[^.]+$/", "", $file->getBasename());

Я протестировал его с помощью «file.txt.zip», чтобы убедиться, что он возвращает «file.txt», а не «файл».

person mrwaim    schedule 25.05.2015
comment
$file->getBasename('.' . $file->getExtension()) - это то, как это должно быть сделано, а не регулярное выражение. - person salathe; 28.05.2015
comment
@salathe Отправьте это как ответ, потому что это правильный ответ на этот вопрос. +1 - person crmpicco; 02.03.2016
comment
@crmpicco Это было лучшее, что я мог придумать (внимательно прочитайте ОП). Я надеялся на что-то более прямое и элегантное. - person tzvi; 02.03.2016