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

PHP 獲取文件擴展名的 4 種經典方法對比

     編輯:PHP 相關知識

在 PHP 開發中,獲取文件擴展名是高頻需求。本文整理了四種常見寫法,並分析其優缺點,幫助你選擇最適合的方案。

方法一:strrpos + substr

function extend_1($file_name) {
    $retval = "";
    $pt = strrpos($file_name, ".");
    if ($pt) $retval = substr($file_name, $pt + 1, strlen($file_name) - $pt);
    return $retval;
}

手動查找最後一個點號位置並截取。需注意 strrpos 可能返回 0(文件名以點開頭),嚴格判斷建議用 if ($pt !== false)。

方法二:pathinfo() 內置函數(推薦)

function extend_2($file_name) {
    $extend = pathinfo($file_name);
    $extend = strtolower($extend["extension"]);
    return $extend;
}

pathinfo() 返回關聯數組,包含 dirname、basename、extension。可直接指定 PATHINFO_EXTENSION 只取擴展名,效率高且處理邊界情況(如無擴展名、多點號)更可靠。

方法三:explode 分割取最後元素

function extend_3($file_name) {
    $extend = explode(".", $file_name);
    $va = count($extend) - 1;
    return $extend[$va];
}

將字符串按點號分割,取最後一段。缺點:文件名無擴展名時會誤返回文件名本身;文件名含多個點(如 test.tar.gz)只能取最後一段。

方法四:循環截取(不推薦)

function getFileExt($file_name) {
    while ($dot = strpos($file_name, ".")) {
        $file_name = substr($file_name, $dot + 1);
    }
    return $file_name;
}

每次找到點號就截取後續字符,直到沒有點號。邏輯繞彎,且同樣無法正確處理 .htaccess 類隱藏文件或多點號情況。

總結建議

  • 首選 pathinfo():標準庫函數,語義清晰,邊界處理完善。
  • 需兼容極舊 PHP 版本時,可用 strrpos 方案並加嚴格判斷。
  • 避免使用 explode 或循環截取,易產生邏輯漏洞。

pathinfo() 速查

<?php
print_r(pathinfo("/testweb/test.txt"));
// 輸出:Array([dirname] => /testweb [basename] => test.txt [extension] => txt)

print_r(pathinfo("/testweb/test.txt", PATHINFO_BASENAME));
// 輸出:test.txt
?>
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved