第一種:
1234567
891011
1213
1415
<?php
//獲取副檔名
//substr(strrchr(' name.txt ', '.'), 1);
//function fileextension(
$fstr
)$file_extension
= fileextension(
"/abc/def.g/123");
print_r
($file_extension);
?>
第二種:
1234567
<?php
function file_extension(
$filename
)$filename
= file_extension(
'/www/music/kevin.jpeg.***');
echo
$filename
;?>
第三種:
1234567
8910
<?php
function file_extension(
$filename
)$filename
= file_extension(
'name.txt');
echo
$filename
;?>
第四種:
1234567
891011
<?php
function getfileext(
$file_name
)return
$file_name;}
$filename
= getfileext(
'name.txt');
echo
$filename
;?>
第五種:
1234567
891011
12
<?php
/** description: getfileext - 獲取副檔名
* parm: $path - 目錄路徑
* return: string
*/function getfileext(
$path
)$filename
= getfileext(
'kevin.jpeg.***');
echo
$filename
;?>
第六種:
123
<?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),所以接下來這個函式首先消除了查詢字串,之後再進行了處理,**如下:
1234567
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 結果...