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

PHP 取得檔案副檔名 N 種寫法大比拚:pathinfo 才是正解

     編輯:PHP 綜合知識

常見寫法與缺陷

<?php
$file = 'abc.3434.342.12123.123.exe';

// 1. explode + 取最後元素
$arr = explode('.', $file);
echo $arr[count($arr)-1];           // exe
echo end($arr);                     // exe
echo array_pop($arr);               // exe(會修改原陣列)

// 2. 遍歷取最後
foreach ($arr as $v) $last = $v;
echo $last;                         // exe

// 3. krsort + array_shift
krsort($arr);
echo array_shift($arr);             // exe

// 4. pathinfo() 陣列
$info = pathinfo($file);
echo $info['extension'];            // exe

// 5. pathinfo() 常數(推薦)
echo pathinfo($file, PATHINFO_EXTENSION); // exe

// 6. substr 固定長度(極不推薦)
echo substr($file, -3);             // exe(副檔名非固定 3 字元時失效)

邊界測試

結論

唯有 pathinfo($file, PATHINFO_EXTENSION) 能正確處理所有邊界:

  • 無副檔名 → 回傳 ""(不報警告)。
  • 路徑含點 → 僅解析 basename 部分。
  • 隱藏檔、雙副檔名 → 符合預期語意。
  • 內建 C 實作,效能最佳。

補充:取得完整路徑資訊

$info = pathinfo('/www/htdocs/image.jpg');
/*
Array
(
    [dirname] => /www/htdocs
    [basename] => image.jpg
    [extension] => jpg
    [filename] => image
)
*/

可搭配 PATHINFO_DIRNAME/BASENAME/FILENAME/EXTENSION 常數單獨取值。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
檔案名explode/endpathinfo(EXTENSION)備註
test.txttxttxt正常
.htaccesshtaccesshtaccess隱藏檔視為無主檔名、有副檔名
archive.tar.gzgzgz雙副檔名僅取最後
/path/to/filefile空字串無副檔名,explode 誤判
/path.with.dots/filefile空字串路徑含點,explode 誤判
/path.with.dots/file.txttxttxt正常