PHP Conference Japan 2024

SplFileInfo::getBasename

(PHP 5 >= 5.2.2, PHP 7, PHP 8)

SplFileInfo::getBasename取得檔案的基本名稱

描述

public SplFileInfo::getBasename(string $suffix = ""): string

此方法會回傳檔案、目錄或連結的基本名稱,而不包含路徑資訊。

注意

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"

參見

新增筆記

使用者提供的筆記 3 則筆記

adam dot schubert at sg1-game dot net
8 年前
如果您只想取得檔名,且不想使用奇怪的

<?php
pathinfo
($file->getBasename(), PATHINFO_FILENAME);
?>

您可以使用(同樣奇怪但看起來較好)

<?php
$file
->getBasename('.'.$file->getExtension());
?>

PS:為什麼有 getFilename?當它回傳與 getBasename 大致相同的東西?我必須執行這個醜陋的東西^,而不是簡單的 getFilename...
schuyler dot bos at gmail dot com
7 年前
同意,這真是太蠢了。為什麼不讓 getFileName() 直接回傳不含副檔名的字串。這樣,就會有一個方法可以回傳所有不同的排列組合,而無需進行奇怪的編碼。

getBaseName()
getExtention()
getFileName()

雖然由於命名,讓 getBaseName() 回傳不含副檔名的檔案名稱可能更有意義,因為 getFileName() 會暗示它具有檔案副檔名。
glen at pld-linux dot org
6 年前
與 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"
To Top