在 PHP 開發中,獲取文件擴展名是高頻需求。本文整理了四種常見寫法,並分析其優缺點,幫助你選擇最適合的方案。
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)。
function extend_2($file_name) {
$extend = pathinfo($file_name);
$extend = strtolower($extend["extension"]);
return $extend;
}
pathinfo() 返回關聯數組,包含 dirname、basename、extension。可直接指定 PATHINFO_EXTENSION 只取擴展名,效率高且處理邊界情況(如無擴展名、多點號)更可靠。
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():標準庫函數,語義清晰,邊界處理完善。strrpos 方案並加嚴格判斷。<?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
?>