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

PHP 獲取文件後綴名的三種常用方法對比

     編輯:PHP 綜合知識

前言

在文件上傳、處理、驗證等場景中,獲取文件擴展名是基礎操作。本文整理三種主流方法,分析優缺點並給出最佳實踐建議。

方法一:substr + strrpos(經典手動截取)

function get_file_type($filename) {
    return substr($filename, strrpos($filename, '.') + 1);
}
  • ✅ 無依賴,性能極高
  • ⚠️ 不處理無擴展名、隱藏文件(如 .htaccess)、多點文件名(archive.tar.gz)等邊界情況

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

function get_file_type($filename) {
    $info = pathinfo($filename);
    return strtolower($info['extension'] ?? '');
}
  • ✅ 正確處理路徑分隔符、多點、無擴展名等情況
  • ✅ 返回統一小寫,便於後續比對
  • ⚠️ PHP 5.2+ 才支持 PATHINFO_EXTENSION 常量,但數組寫法通用

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

function get_file_type($filename) {
    $parts = explode('.', $filename);
    return $parts[count($parts) - 1] ?? '';
}
  • ✅ 邏輯直觀
  • ⚠️ 同方法一,無法正確處理 .gitignore、file.tar.gz 等情況

綜合對比表

方法正確性性能推薦指數適用場景
pathinfo()⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐生產環境首選
substr+strrpos⭐⭐⭐⭐⭐⭐⭐⭐⭐極簡場景、性能敏感
explode()⭐⭐⭐⭐⭐⭐⭐教學演示、簡單腳本

最佳實踐封裝

function get_extension($filename) {
    $ext = pathinfo($filename, PATHINFO_EXTENSION);
    return $ext ? strtolower($ext) : '';
}

// 使用示例
$files = ['image.JPG', 'archive.tar.gz', '.htaccess', 'README', '/path/to/file.php'];
foreach ($files as $f) {
    echo "$f => " . get_extension($f) . "\n";
}
/* 輸出:
image.JPG => jpg
archive.tar.gz => gz
.htaccess => htaccess
README =>
/path/to/file.php => php
*/

安全提示

僅獲取後綴不足以保證文件類型安全。上傳處理時請結合:

  1. mime_content_type() 或 finfo_file() 驗證 MIME 類型
  2. 白名單校驗擴展名
  3. 重命名存儲(如 uniqid().'.'.$ext)
  4. 上傳目錄禁止腳本執行權限
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved