php獲取副檔名

2021-05-28 17:44:08 字數 3732 閱讀 2392

第一種:

123

4567

891011

1213

1415

<?php

//獲取副檔名

//substr(strrchr(' name.txt ', '.'), 1);

//function fileextension(

$fstr

)$file_extension

= fileextension(

"/abc/def.g/123");

print_r

($file_extension);

?>

第二種:

123

4567

<?php

function file_extension(

$filename

)$filename

= file_extension(

'/www/music/kevin.jpeg.***');

echo

$filename

;?>

第三種:

123

4567

8910

<?php

function file_extension(

$filename

)$filename

= file_extension(

'name.txt');

echo

$filename

;?>

第四種:

123

4567

891011

<?php

function getfileext(

$file_name

)return

$file_name;}

$filename

= getfileext(

'name.txt');

echo

$filename

;?>

第五種:

123

4567

891011

12

<?php

/**    description: getfileext - 獲取副檔名

*    parm: $path - 目錄路徑

*    return: string

*/function getfileext(

$path

)$filename

= getfileext(

'kevin.jpeg.***');

echo

$filename

;?>

第六種:

1

23

<?php

echo

pathinfo

('name.txt'

,pathinfo_extension)

;?>

前五種都是使用字串函式處理的方式獲取副檔名,而第六種是使用filesystem函式獲取的。

獲取副檔名需要考慮幾種情況:

無副檔名

路徑裡包含字元」.」,例如」/abc/def.g/123.txt」

路徑裡包含字元」.」,但檔案沒有副檔名,例如」/abc/def.g/123″

第一種方法測試正常,不顯示任何內容

第二種顯示異常,顯示內容:/abc/def/gkl

第三種顯示異常,顯示內容:/abc/def/gkl

第四種顯示異常,顯示內容:/abc/def/gkl

第五種測試正常,不顯示任何內容

第六種測試正常,不顯示任何內容

程式實現設計上,第一種  副檔名預設為空 ,然後找 「.」 ,沒找到就不執行接下來的擷取副檔名操作,找到後就執行,執行後會把副檔名賦值給儲存副檔名的變數,然後返回

第二種異常的原因,歸咎於使用的函式explode,它使用 『.』 來分隔字串,沒找到就會把整個字串返回為陣列元素,然後end返回陣列元素,所以會顯示全路徑

第三種原因同上

第四種原因類似與第一種,沒有找到 『.』 ,會直接返回傳遞過來的引數,而不會執行while迴圈

第五種測試正常的原因是因為trim這個函式,strrchr($path,』.'),跟substr( strrchr($path,』.'),1 )返回結果都為false,然後使用trim函式,正常了!然後就顯示空 if( trim(false)==null ) 顯示為ok

第六種為使用檔案系統函式,返回副檔名,沒有就不會顯示吧

第一種方法測試正常,顯示txt

第二種方法測試正常,顯示txt

第三種方法測試正常,顯示txt

第四種方法測試正常,顯示txt

第五種方法測試正常,顯示txt

第六種方法測試正常,顯示txt

這種方法使用了strrpos函式,返回』.'最後一次出現的位置,然後據此進行的處理,所以路徑中包含』.'無影響

這種方法根據』.'把字串分離為陣列元素,然後返回最後乙個元素的值,如果檔案有副檔名的話,必然在最後乙個元素裡,所以測試正常

這種方法跟上一種原理相同

這種方法使用while迴圈從第乙個』.'不斷擷取』.'後的內容,知道最後乙個』.』 ,如果檔案有副檔名的話 ,迴圈結束後變數裡儲存的也就是副檔名了

這種方法使用strrchr獲取最後一次』.'出現的字串,然後去除』.』 ,如果檔案有副檔名的話,得到副檔名

這種方法使用檔案系統函式,返回副檔名,正常

顯示異常,顯示g/123

顯示異常,顯示g/123

顯示異常,顯示g/123

顯示異常,顯示g/123

顯示異常,顯示g/123

正常,無顯示

前5種方法都是根據』.'的位置來判斷副檔名,如果』.'出現在資料夾名裡,而檔案無副檔名,程式會把.出現後的字串全部當作副檔名

最後一種方法為系統自帶的檔案系統函式,應該有考慮這些情況

另外,使用pathinfo來獲取副檔名,如果用在接受使用者查詢的情況下,還需要考慮乙個問題:路徑包含查詢字串的引數裡含有』.'(例如eg. &x.1=2&y.1=5),所以接下來這個函式首先消除了查詢字串,之後再進行了處理,**如下:

123

4567

891011

<?php

function extension(

$path

)?>

好了,分析完了,原來除了使用系統自帶函式實現的第六種方法外,全部存在問題,接下來博主會根據各種情況再寫一些修正處理來完善前五種函式,博主也是php的初學者,歡迎板磚,把您的觀點一件分享出來,大家一起進步!

ps:給大家補一點副檔名的小知識(清楚者跳過):

副檔名的用途

:副檔名可以幫助計算機使用者辨別檔案的型別,也可以幫助計算機將檔案分類,並標識這一類拓展名的檔案用什麼程式去開啟。

副檔名不是乙個檔案的必要構成部分

:任何乙個檔案可以有或沒有副檔名。對於開啟檔案操作,沒有副檔名的檔案需要選擇程式去開啟它,有副檔名的檔案會自動用設定好的程式(如有)去嘗試開啟(是「嘗試開啟」,而不是「開啟」),副檔名是乙個常規檔案的構成部分,但乙個檔案並不一定需要乙個副檔名

副檔名並沒有表明該檔案是何種型別

PHP獲取副檔名

第一種 tok strtok string,使用strtok將字串分割成乙個個令牌 while tok count count arr i count 1 file type arr i 第二種 arr explode string 使用explode 函式分割字串,返回值是乙個陣列 count c...

php獲取 副檔名

1 str as.da.efg 2 獲取檔案字尾名 3 strrchr 查詢指定字元在字串中的最後一次出現 4echo substr strrchr str,1 5 67 strrpos 計算指定字串在目標字串中最後一次出現的位置 8echo substr str,strrpos str,1 9 1...

PHP獲取副檔名的方法

php獲取副檔名的方法 上傳成功示例 array 5 ext substr strrchr upfile name 1 var dump ext 結果 string 4 docx ext substr upfile name strrpos upfile name 1 var dump ext 結果...