首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 獲取檔案副檔名的實用方法

     編輯:PHP 相關知識

前言

在 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;
}
?>

核心函數解析

  • strtolower():將字串轉為小寫,確保「.JPG」與「.jpg」視為相同。
  • strrev():反轉字串,例如 "bkjia.txt" 變為 "txt.aijkb",使副檔名位於字串開頭。
  • strpos():在反轉字串中尋找第一個「.」的位置,該位置數值即等於副檔名的字元數(如 "txt" 長度為 3)。
  • substr():根據原字串長度減去副檔名長度,從該索引開始截取至字串末尾。

進階建議

實務上建議直接使用 PHP 內建的 pathinfo($filename, PATHINFO_EXTENSION),它能正確處理多重點號(如 archive.tar.gz)、隱藏檔(如 .htaccess)等邊界情況,且程式碼更簡潔易維護。

總結

理解字串反轉與位置計算的邏輯,不僅能解決副檔名擷取,也能舉一反三應用於其他字串剖析任務。但在專案中,優先使用標準庫函數可減少錯誤並提升可讀性。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved