網路城邦

上一篇 回創作列表 下一篇   字體:
PHP 取得檔案的副檔名
2013/06/21 16:20:45瀏覽1131|回應0|推薦0
國外有一篇文章在談論『PHP取得檔案的副檔名(PHP Get File Extension)』的文章。
Cowburn 把所有取得副檔名的方法都找出來了,而且還評論了哪種方法最適合。我先列出Cowburn提到的五種方法,並把其中的註解中文化了。下列的所有方式,最後回傳的結果都是"git"字串,沒有 . 喔!

//假設檔名

$filename = 'mypic.gif';

// 1. 使用陣列函式 "explode/end" 方式
$ext = end(explode('.', $filename));

// 2. 使用字串函式 "strrchr" 方式
$ext = substr(strrchr($filename, '.'), 1);

// 3. 使用字串函式 "strrpos" 方式
$ext = substr($filename, strrpos($filename, '.') + 1);

// 4. 使用正規式 "preg_replace" 方式
$ext = preg_replace('/^.*\.([^.]+)$/D', '$1', $filename);

// 5. 特別(從來沒用過)方式
//   參考: http://php.about.com/od/finishedphp1/qt/file_ext_PHP.htm

$exts = split("[/\\.]", $filename);
$n = count($exts)-1;
$ext = $exts[$n];

以下是各種方式的速度排序由上(快)而下(慢)

第二種:使用字串函式 "strrchr" 方式

第三種:使用字串函式 "strrpos" 方式

第四種:使用正規式 "preg_replace" 方式

第一種:使用陣列函式 "explode/end" 方式

不過在排名上第一位的strrchr的方式還不是最好的,好酒沈甕低!Cowburn首選推薦則是使用pathinfo()這個內建函式

$filename = 'mypic.gif';
$ext = pathinfo($filename, PATHINFO_EXTENSION);

原來官方的內建函式pathinfo(),只要再多給第二參數,就能直接取得所需資料,而且這個方式是全部效能上最好的一個,果然是個好辦法。pathinfo第二參考可傳入的值有:

PATHINFO_DIRNAME:取得資料夾路徑
PATHINFO_BASENAME:取得整個檔名(主+副)
PATHINFO_EXTENSION:取得副檔名
PATHINFO_FILENAME :取得主檔名

我們再來補個官方範例會更清楚一點

$path_parts = pathinfo('/www/htdocs/inc/lib.inc.php');

echo $path_parts['dirname'], "\n";
echo $path_parts['basename'], "\n";
echo $path_parts['extension'], "\n";
echo $path_parts['filename'], "\n"; //從PHP 5.2.0開始有

//上面也可以寫這樣
$path = '/www/htdocs/inc/lib.inc.php';

echo pathinfo($path, PATHINFO_DIRNAME), "\n";//return '/www/htdocs/inc'
echo pathinfo($path, PATHINFO_BASENAME), "\n";//return 'lib.inc.php'
echo pathinfo($path, PATHINFO_EXTENSION), "\n";//return 'php'
echo pathinfo($path, PATHINFO_FILENAME ), "\n";//return 'lib.inc' (從PHP 5.2.0開始有)

( 知識學習語言 )
回應 推薦文章 列印 加入我的文摘
上一篇 回創作列表 下一篇

引用
引用網址:https://classic-blog.udn.com/article/trackback.jsp?uid=maxmas&aid=7794795