如果您只想取得檔名,且不想使用奇怪的
<?php
pathinfo($file->getBasename(), PATHINFO_FILENAME);
?>
您可以使用(同樣奇怪但看起來較好)
<?php
$file->getBasename('.'.$file->getExtension());
?>
PS:為什麼有 getFilename?當它回傳與 getBasename 大致相同的東西?我必須執行這個醜陋的東西^,而不是簡單的 getFilename...
(PHP 5 >= 5.2.2, PHP 7, PHP 8)
SplFileInfo::getBasename — 取得檔案的基本名稱
此方法會回傳檔案、目錄或連結的基本名稱,而不包含路徑資訊。
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"
如果您只想取得檔名,且不想使用奇怪的
<?php
pathinfo($file->getBasename(), PATHINFO_FILENAME);
?>
您可以使用(同樣奇怪但看起來較好)
<?php
$file->getBasename('.'.$file->getExtension());
?>
PS:為什麼有 getFilename?當它回傳與 getBasename 大致相同的東西?我必須執行這個醜陋的東西^,而不是簡單的 getFilename...
同意,這真是太蠢了。為什麼不讓 getFileName() 直接回傳不含副檔名的字串。這樣,就會有一個方法可以回傳所有不同的排列組合,而無需進行奇怪的編碼。
getBaseName()
getExtention()
getFileName()
雖然由於命名,讓 getBaseName() 回傳不含副檔名的檔案名稱可能更有意義,因為 getFileName() 會暗示它具有檔案副檔名。
與 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"