2015-03-11 31 views
8

Uzyskuję dostęp do wielu plików w obiekcie SPLFileInfo. Widzę sposób, aby uzyskać ścieżkę, nazwę pliku, a nawet rozszerzenie pliku. Czy istnieje sposób na pobranie nazwy pliku bez rozszerzenia? Oto kod, nad którym pracowałem, ale mam nadzieję, że dostanę coś bardziej eleganckiego. Czy jest gotowe rozwiązanie?SPLFileInfo: pobierz nazwę pliku bez rozszerzenia

$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 

Odpowiedz

0

nie mogłem znaleźć nic urzędnik jak .NET firmy - Path.GetFileNameWithoutExtension https://msdn.microsoft.com/en-us/library/system.io.path.getfilenamewithoutextension%28v=vs.110%29.aspx

Oto co używam zamiast preg_replace ("/.[^.]+$/", "" , $ plik-> getBasename());

Przetestowałem ją z „file.txt.zip”, aby upewnić się, że wraca „plik.txt”, a nie „plik”

+6

'$ Plik-> getBasename ($ Plik-> getExtension() ''.)' jest jak należy to zrobić, nie regex. – salathe

+1

@salathe Wyślij to jako odpowiedź, ponieważ jest to poprawna odpowiedź na to pytanie. +1 – crmpicco

+0

@crmpicco To było najlepsze, co mogłem wymyślić (przeczytaj uważnie OP). Miałem nadzieję na coś bardziej bezpośredniego i eleganckiego. – tzvi

9

za spóźnienie, a wszystkie kredyty powinien udać się do bycia @salathe pierwsza pomoc dla OP, ale tutaj jest the link to PHP manual dla funkcji basename. Zasadniczo, można uzyskać przedłużenie, a następnie poprzedzić kropki . i wreszcie użyć funkcji basename uzyskać nazwę, na przykład:

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

dla szybkiego czytania, oto przykład stronę podręcznika w 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')); 

wyjściowa:

string(8) "file.txt" 
string(8) "file.txt" 
string(4) "file" 
Powiązane problemy