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

PHP 獲取文件擴展名的三種高效方法:pathinfo、explode、strrpos 實戰對比

     編輯:PHP 相關知識

在文件上傳、驗證、處理等場景中,獲取文件擴展名是高頻需求。本文總結三種主流實現方式,分析優缺點並給出推薦用法。

方法一:pathinfo() —— 官方推薦,功能最全

function getExtPathinfo($filename) {
    $info = pathinfo($filename);
    return isset($info['extension']) ? strtolower($info['extension']) : false;
}
  • 內置函數,自動處理路徑分隔符、多點文件名(如 archive.tar.gz 取 gz)。
  • 返回關聯數組含 dirname、basename、extension、filename,復用性強。
  • 性能優異,首選方案。

方法二:explode() 分割取最後元素

function getExtExplode($filename) {
    $parts = explode('.', $filename);
    return count($parts) > 1 ? strtolower(end($parts)) : false;
}
  • 邏輯直觀,無依賴。
  • 缺點:文件名含多個點時需確保取最後一段;無路徑分隔符處理,需先 basename()。

方法三:strrpos() + substr() 定位最後一個點

function getExtStrrpos($filename) {
    $pos = strrpos($filename, '.');
    if ($pos === false) return false;
    return strtolower(substr($filename, $pos + 1));
}
  • 單次查找,理論性能最優(微乎其微)。
  • 需自行處理無擴展名、隱藏文件(如 .htaccess)等邊界情況。

性能與正確性對比

維度pathinfoexplodestrrpos
正確處理多點文件名✅✅ (end)✅
自動忽略目錄分隔符✅❌ (需 basename)❌ (需 basename)
隱藏文件 (.gitignore)✅ (extension 為空)⚠️ 可能誤判⚠️ 可能誤判
代碼簡潔度⭐⭐⭐⭐⭐⭐⭐
執行速度快中極快

最佳實踐建議

// 通用安全獲取擴展名(含路徑、多點、隱藏文件防護)
function getFileExtension($path) {
    $basename = basename($path);
    $info = pathinfo($basename);
    $ext = isset($info['extension']) ? strtolower($info['extension']) : '';
    // 可選:白名單驗證
    // $allowed = ['jpg','png','gif','pdf'];
    // return in_array($ext, $allowed) ? $ext : false;
    return $ext ?: false;
}

生產環境強烈建議使用 pathinfo() 並配合 basename(),兼顧正確性、可讀性與性能。

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