天天看點

PHP擷取檔案擴充名的方法

PHP擷取檔案擴充名的方法

上傳成功示例

array(5) {
  ["name"]=>
      string(41) "測試.docx"
  ["type"]=>
      string(24) "application/octet-stream"
  ["tmp_name"]=>
      string(14) "/tmp/phpGbor6g"
  ["error"]=>
      int(0)
  ["size"]=>
      int(20793)
}
           

第1種方法:

$ext = substr(strrchr($upfile['name'], '.'), 1);
var_dump($ext);
           

結果: string(4) “docx”

第2種方法:

$ext = substr($upfile['name'], strrpos($upfile['name'], '.')+1);
var_dump($ext);
           

結果: string(4) “docx”

第3種方法:

$ext = end(explode('.', $upfile['name']));
var_dump($ext);
           

結果: string(4) “docx”

第4種方法:

$info = pathinfo($upfile['name']);
$ext =  $info['extension'];
var_dump($ext);
           

結果: string(4) “docx”

第5種方法:

$ext = pathinfo($upfile['name'], PATHINFO_EXTENSION);
var_dump($ext);
           

結果: string(4) “docx”

前四種方法都有些小的問題。

要想完全正确擷取檔案的擴充名,必須要能處理以下三種特殊情況。

1.沒有檔案擴充名

2.路徑中包含了字元.,如/home/test.d/test.txt

3.路徑中包含了字元.,但檔案沒有擴充名。如/home/test.d/test

很明顯:

方法1、方法2不能處理第三種情況,

方法3不能正确處理第一三種情況。

方法4可以正确處理,但是在不存在擴充名時,會發出一個警告。

隻有第5種方法才是最正确的方法。

pathinfo — 傳回檔案路徑的資訊

mixed pathinfo (string $path [, int $options = PATHINFO_DIRNAME | PATHINFO_BASENAME | PATHINFO_EXTENSION | PATHINFO_FILENAME ] )
           

pathinfo() 傳回一個關聯數組包含有 path 的資訊。傳回關聯數組還是字元串取決于 options。

path

要解析的路徑。

options

如果指定了,将會傳回指定元素;

它們包括:

PATHINFO_DIRNAME - 目錄

PATHINFO_BASENAME - 檔案名(含擴充名)

PATHINFO_EXTENSION - 擴充名

PATHINFO_FILENAME - 檔案名(不含擴充名,PHP>5.2)

這四個常量的值分别是1、2、4、8,

如果沒有指定 options 預設是傳回全部的單元。

傳回值

如果沒有傳入 options ,将會傳回包括以下單元的數組 array:dirname,basename 和 extension(如果有),以 及filename。

例子:

<?php
    $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"; // since PHP 5.2.0
?>
           

以上例程會輸出:

/www/htdocs/inc
lib.inc.php
php
lib.inc
           

例子:

<?php
    $path_parts = pathinfo('/path/emptyextension.');
    var_dump($path_parts['extension']);

    $path_parts = pathinfo('/path/noextension');
    var_dump($path_parts['extension']);
?>
           

以上例程的輸出類似于:

string(0) ""

Notice: Undefined index: extension in test.php on line 6
NULL