在 PHP 開發中,取得檔案的副檔名(擴展名)是常見需求。雖然內建函數 pathinfo() 可輕鬆達成,但了解底層邏輯有助於應對特殊情況。本文介紹一個不依賴 pathinfo() 的自訂函數實作,並解析其運作原理。
<?php
$file_name = "bkjia.txt";
echo get_exname($file_name); // 輸出:txt
/**
* 取得檔案副檔名
* @param string $file_name 檔案名稱
* @return string|false 副檔名或 false
*/
function get_exname($file_name) {
if (empty($file_name)) return false;
// 統一轉小寫,避免大小寫不一致
$file_name = strtolower($file_name);
// 反轉字串,讓「.」變成第一個可搜尋的字元
$rev_str = strrev($file_name);
// 找出「.」在反轉字串中的位置,即為副檔名長度
$ex_name_len = strpos($rev_str, '.');
// 若找不到「.」則回傳 false
if ($ex_name_len === false) return false;
// 計算原字串總長度
$file_name_len = strlen($file_name);
// 從原字串末尾截取副檔名長度的字元
$ex_name = substr($file_name, $file_name_len - $ex_name_len);
return $ex_name;
}
?>
實務上建議直接使用 PHP 內建的 pathinfo($filename, PATHINFO_EXTENSION),它能正確處理多重點號(如 archive.tar.gz)、隱藏檔(如 .htaccess)等邊界情況,且程式碼更簡潔易維護。
理解字串反轉與位置計算的邏輯,不僅能解決副檔名擷取,也能舉一反三應用於其他字串剖析任務。但在專案中,優先使用標準庫函數可減少錯誤並提升可讀性。