2015-03-11 23 views
8

Tôi đang truy cập một số tệp trong đối tượng SPLFileInfo. Tôi thấy một cách để lấy đường dẫn, tên tệp và thậm chí là phần mở rộng của tệp. Có cách nào để lấy tên tệp mà không có phần mở rộng không? Đây là mã tôi đã làm việc với nhưng tôi hy vọng sẽ có được một cái gì đó thanh lịch hơn. Có một giải pháp hộp nào không?SPLFileInfo: lấy tên tệp không có phần mở rộng

$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 

Trả lời

0

tôi couldnt tìm thấy bất cứ điều gì chính thức như của .net - Path.GetFileNameWithoutExtension https://msdn.microsoft.com/en-us/library/system.io.path.getfilenamewithoutextension%28v=vs.110%29.aspx

Dưới đây là những gì tôi đang sử dụng thay vì preg_replace ("/.[^.]+$/", "" , $ file-> getBasename());

Tôi đã thử nghiệm nó với "file.txt.zip" để đảm bảo nó sẽ trả về "file.txt", không phải "tập tin"

+6

'$ file-> getBasename ('.' File-> getExtension())' là cách thực hiện, không phải là regex. – salathe

+1

@salathe Gửi câu trả lời này vì đây là câu trả lời đúng cho câu hỏi này. +1 – crmpicco

+0

@crmpicco Đó là điều tốt nhất tôi có thể nghĩ ra (đọc kỹ OP). Tôi đã hy vọng cho một cái gì đó trực tiếp hơn và thanh lịch. – tzvi

9

tôi đến trễ và tất cả các khoản tín dụng nên đến @salathe là lần đầu tiên giúp OP, nhưng đây là the link to PHP manual cho hàm tên cơ sở. Về cơ bản, bạn sẽ có phần mở rộng, sau đó thêm vào trước một dấu chấm . và cuối cùng là sử dụng chức năng basename để có được tên, như thế này:

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

Để đọc nhanh, đây là ví dụ PHP thủ công trang của:

$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')); 

Đầu ra:

string(8) "file.txt" 
string(8) "file.txt" 
string(4) "file" 
Các vấn đề liên quan