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

PHP 取得上傳檔案副檔名的多種方法比較

     編輯:PHP 相關知識

PHP 取得上傳檔案副檔名的多種方法比較

處理檔案上傳時,取得副檔名是基本需求。本文整理四種常見做法,並說明各自優缺點,幫助開發者選擇最適合的方式。

方法一:pathinfo() 函數(推薦)

$imgname = $_FILES["file"]["name"];
$filetype = pathinfo($imgname, PATHINFO_EXTENSION);
$newname = date("Ymdhis") . "." . $filetype;

優點:內建函數、語意清晰、正確處理多點檔名(如 archive.tar.gz 只取 gz)。
缺點:需 PHP 4.0.3+ 版本(現代環境皆支援)。

方法二:substr() 搭配 strpos()

$file = 'aaa.gif';
echo substr($file, strpos($file, '.') + 1);

缺點:若檔名含多個點(如 my.photo.jpg)會錯誤取得 photo.jpg;若無點會回傳整個字串。

方法三:explode() 切割陣列取最後元素

$file = '111cn.gif';
$parts = explode('.', $file);
echo $parts[count($parts) - 1];

// 或封裝為函數
function getfix($filename) {
    return end(explode('.', $filename));
}

缺點:同樣無法正確處理多點檔名;效能略低於 pathinfo()。

方法四:strrchr() 取最後一個點之後字串

$extname = substr($upload_file_name, strpos($upload_file_name, ".") + 1);

注意:strpos() 找不到時回傳 false,需額外判斷;同樣有多點檔名問題。

最佳實務建議

  1. 優先使用 pathinfo($filename, PATHINFO_EXTENSION),語意明確且正確處理邊界情況。
  2. 上傳處理前務必驗證 MIME 類型與副檔名雙重檢查,防止惡意檔案上傳。
  3. 重新命名檔案時建議使用 uniqid() 或雜湊值避免衝突,而非單純用時間戳記。
// 完整上傳處理範例
$allowed_ext = ['jpg', 'jpeg', 'png', 'gif', 'pdf'];
$filename = $_FILES['file']['name'];
$ext = strtolower(pathinfo($filename, PATHINFO_EXTENSION));

if (in_array($ext, $allowed_ext)) {
    $new_name = uniqid('upload_', true) . '.' . $ext;
    move_uploaded_file($_FILES['file']['tmp_name'], "/uploads/{$new_name}");
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved