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

PHP 取得檔案副檔名的五種方法與最佳實踐

     編輯:PHP 相關知識

PHP 取得檔案副檔名的五種方法與最佳實踐

取得副檔名看似簡單,實則有「無副檔名」、「路徑含點」、「隱藏檔」等邊界情況。本文比較五種常見寫法,指出唯有 pathinfo() 搭配 PATHINFO_EXTENSION 為最穩健解法。

五種寫法比較

// 1. substr + strrchr
substr(strrchr($file, '.'), 1);

// 2. substr + strrpos
substr($file, strrpos($file, '.') + 1);

// 3. explode + end
end(explode('.', $file));

// 4. pathinfo 陣列取值
$info = pathinfo($file);
$info['extension'] ?? ''; // 無副檔名會觸發 Notice

// 5. pathinfo 指定常數(推薦)
pathinfo($file, PATHINFO_EXTENSION); // 無副檔名回傳空字串,不報錯

邊界測試

輸入方法 1-3方法 4方法 5
test.jpgjpgjpgjpg
testtest (錯)Notice'' (正確)
/path.with.dots/testtest (錯)Notice'' (正確)
/path.with.dots/test.txttxttxttxt
.htaccesshtaccesshtaccesshtaccess

pathinfo() 完整回傳結構

$file = '/www/htdocs/image.jpg';
print_r(pathinfo($file));
/*
Array(
    [dirname] => /www/htdocs
    [basename] => image.jpg
    [extension] => jpg
    [filename] => image   // PHP 5.2+
)
*/

常數速查

  • PATHINFO_DIRNAME = 1
  • PATHINFO_BASENAME = 2
  • PATHINFO_EXTENSION = 4
  • PATHINFO_FILENAME = 8 (PHP 5.2+)

注意:常數不可用位元或運算組合,若需多欄位請用陣列版 pathinfo($file)。

結論

請直接使用 pathinfo($filename, PATHINFO_EXTENSION),它能正確處理所有邊界情況,且無額外錯誤訊息,是 PHP 官方推薦的標準做法。

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