从文件类型建议文件扩展名

时间:2013-07-24 03:12:53

标签: php filenames file-extension file-type

我有一个没有扩展名的图像文件名(假设它是image_file_name - 注意它正在遗漏扩展)并且我也知道文件类型(假设文件类型是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 ......等等。

有可能做到以上几点吗?怎么样?

3 个答案:

答案 0 :(得分:1)

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

这将正确地为您提供扩展,并且比$_FILE['image']['type']更可靠。

答案 1 :(得分: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];

答案 2 :(得分:0)

您可以直接使用FILEINFO_MIME来确定MIME类型,然后使用switch case添加扩展名。有这个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;
}

要获得更多扩展程序,请继续添加案例以进行切换。