2013-07-24 40 views
0

我有一個沒有擴展名的圖像文件名(讓我們假設它是image_file_name - 注意它是MISSING擴展),我也知道文件類型(讓我們假設文件類型爲image/jpeg)。現在有沒有一個php函數返回文件擴展名給定的類型?如下面的僞代碼解釋:建議文件擴展名爲

$extension = get_extension('image/jpeg'); // Will return 'jpg' 

$file_name = 'image_file_name' . '.' . $extension; // Will result in $file_name = image_file_name.jpg 

請注意,上面的圖片只是一個例子,文件名可以是任何類型的文件,如網頁文件名或其他任何東西。擴展可以是任何東西,它可以是HTML,CSS等。

是否可以做到以上?如何?

回答

1
$ext = substr(image_type_to_extension(exif_imagetype('dev.png')), 1); //example png 

這會給你正確的擴展名,比$_FILE['image']['type']更可靠。

+0

我沒有使用exat解決方案,但您的想法與修改。非常感謝。 – Greeso

0

您可以使用finfo執行mime-magic來確定文件類型。

$finfo = finfo_open(FILEINFO_MIME, "/path/to/mimiemagic.file"); 
$res = $finfo->file($filename); 
list($type, $encoding) = explode(";", $res); 
$typeToExt = array(
    "image/jpeg"=>"jpg", 
    "image/png"=>"png", 
    "text/html"=>"html", 
    "text/plain"=>"txt", 
    "audio/mpeg"=>"mp3", 
    "video/mpeg"=>"mpg" 
); 

$ext = $typeToExt[$type]; 
0

您可以使用FILEINFO_MIME直接決定MIME類型,然後使用交換機的情況下添加擴展名。有這個mime_content_type(),但似乎不贊成。

$finfo = new FileInfo(null, 'image_file_name'); 

// Determine the MIME type of the uploaded file 
switch ($finfo->file($_FILES['image']['tmp_name'], FILEINFO_MIME) { 
    case 'image/jpg': 
     $extension = 'jpg' 
     $file_name = 'image_file_name' . '.' . $extension; 
    break; 

    case 'image/png': 
     $extension = 'png' 
     $file_name = 'image_file_name' . '.' . $extension; 
    break; 

    case 'image/gif': 
     $extension = 'gif' 
     $file_name = 'image_file_name' . '.' . $extension; 
    break; 
} 

對於更多的擴展,不斷添加案例切換。