在文件上傳、驗證、處理等場景中,獲取文件擴展名是高頻需求。本文總結三種主流實現方式,分析優缺點並給出推薦用法。
function getExtPathinfo($filename) {
$info = pathinfo($filename);
return isset($info['extension']) ? strtolower($info['extension']) : false;
}
archive.tar.gz 取 gz)。dirname、basename、extension、filename,復用性強。function getExtExplode($filename) {
$parts = explode('.', $filename);
return count($parts) > 1 ? strtolower(end($parts)) : false;
}
basename()。function getExtStrrpos($filename) {
$pos = strrpos($filename, '.');
if ($pos === false) return false;
return strtolower(substr($filename, $pos + 1));
}
.htaccess)等邊界情況。| 維度 | pathinfo | explode | strrpos |
|---|---|---|---|
| 正確處理多點文件名 | ✅ | ✅ (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(),兼顧正確性、可讀性與性能。