在文件上傳、處理、驗證等場景中,獲取文件擴展名是基礎操作。本文整理三種主流方法,分析優缺點並給出最佳實踐建議。
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'] ?? '');
}
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
*/
僅獲取後綴不足以保證文件類型安全。上傳處理時請結合:
mime_content_type() 或 finfo_file() 驗證 MIME 類型uniqid().'.'.$ext)