0

我有一个没有扩展名的图像文件名(假设它是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 ...等。

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

4

3 回答 3

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

这将为您提供正确的扩展名,并且比$_FILE['image']['type'].

于 2013-07-24T03:21:09.973 回答
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];
于 2013-07-24T03:25:45.840 回答
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;
}

如需更多扩展,请继续添加要切换的案例。

于 2013-07-24T03:27:36.460 回答