2014-07-05 299 views
0

PHP:我將圖片文件上傳到名爲特殊格式的文件夾中,就像postid_posttype_postserial.ext一樣,以便在顯示特定的博客文章時,我將根據該帖子的帖子ID,帖子類型使用此格式。但這裏的問題是我沒有該文件的擴展名。所以這裏是真正的問題,我如何得到我只知道名稱(在name.ext中)而不是擴展名的文件的擴展名。如何從沒有擴展名的文件名獲取文件擴展名?

僅供參考我搜索了這個,我發現幾個函數返回擴展名,但你必須傳遞一個完整的文件名與擴展名,以獲得有關文件的信息。

+0

您是否試圖從沒有擴展名的文件名中獲取圖像類型?或者文件名是否有你想要查找的擴展名? – FuzzyTree

+0

[可以在不知道它的情況下獲得文件擴展名?]的可能的重複(http://stackoverflow.com/questions/6615009/is-it-possible-to-get-a-file-extension-without-knowing -it) – FuzzyTree

回答

2

在你的情況下,你需要獲得MIME類型的文件,然後在PHP中執行switch語句。你可以通過獲取文件的MIME類型:

$finfo = finfo_open(FILEINFO_MIME_TYPE); // return mime type ala mimetype extension 
$mime_type = finfo_file($finfo, $postid_posttype_postserial_file); 
finfo_close($finfo); 

$mime_types = array(
    'image/gif' => '.gif', 
    'image/jpeg' => '.jpg', 
    // etc. 
); 

$ext = array_key_exists($mime_type, $mime_types) ? $mime_types[$mime_type] : false; 
echo $ext; 

瞭解更多:http://www.php.net/manual/en/function.finfo-file.php

更新2:正如指出的評論,更換switcharray匹配更優雅。

+1

'switch' /'case'有點荒謬。只需設置一個名爲'$ mime_type_array'的數組,然後以'$ mime_type_array [$ mime_type]'的形式訪問。也可以使用'array_key_exists'來確保'$ mime_type'類型實際上在'$ mime_type_array'中,就像這樣'if(array_key_exists(mime_type,$ mime_type_array)){$ ext = $ mime_type_array [$ mime_type]}' – JakeGould

+1

Yeah thanks爲小費。我將編輯我的答案 – lodev09

+0

另外,你可以簡化'$ ext = array_key_exists(mime_type,$ mime_type_array)? $ mime_type_array [$ mime_type]:null;'。只要記住當然也要設置一個帶鍵值的'$ mime_type_array'。 – JakeGould