获取图像扩展名

14

我想获取已上传图片的扩展名。

据我所知,最好的方法是使用getimagesize()函数。

但是,当图片的扩展名为.jpg.JPEG时,该函数的mime返回image/jpeg

如何获取确切的扩展名?


你为什么关心文件扩展名呢?我可以上传一个后缀名为“.png”的jpeg文件,但你仍然可以通过其他方法看出它是jpeg格式的。 - Eric
9个回答

33

您可以使用getimagesize返回的图像类型与image_type_to_extension函数一起使用:

$info = getimagesize($path);
$extension = image_type_to_extension($info[2]);

@phpalix的答案不支持没有明确扩展名的文件(例如:tmp目录中的图像),但是这个脚本可以解决这类问题。 - undefined

33
$ext = pathinfo($filename, PATHINFO_EXTENSION);

6
你还可以使用strrpos和substr函数来获取任何文件的扩展名。
$filePath="images/ajax-loader.gif";

$type=substr($filePath,strrpos($filePath,'.')+1);

echo "file type=".$type;

输出:gif

如果你想要像 .gif 这样的扩展名

$type=substr($filePath,strrpos($filePath,'.')+0);

输出:.gif


strrpos($filePath, '.')+0 的含义是什么? - Cyclonecode

4
$image = explode(".","test.file.hhh.kkk.jpg");
echo end($image);

文件名中包含 . 的文件怎么办? - phpalix
@dfsq,你给了我test.file.jpg,但现在要检查一下带有4个点的那个人。 - Devang Rathod
@dfsq,现在必须回复伙计。 - Devang Rathod
我没有点踩。但是如果有人点踩,你不同意吗? - dfsq
@dfsq,感谢你的评论,让我理解了我的错误所在。 - Devang Rathod
没问题,而且你提出了更好的解决方案。 - dfsq

3

另一种方法:

$ext = strrchr($filename, "."); // .jpg

1
$file_ext = pathinfo($_FILES["file"]["name"], PATHINFO_EXTENSION);

或者使其干净
$filename= $_FILES["file"]["name"];
$file_ext = pathinfo($filename,PATHINFO_EXTENSION);

0

对于那些想要检查图像类型是否为JPEG、PNG等的人,可以使用exif_imagetype函数。该函数读取图像的前几个字节并检查其签名。以下是来自php.net的一个简单示例:

<?php
if (exif_imagetype('image.gif') != IMAGETYPE_GIF) {
   echo 'The picture is not a gif';
}
?>

0

你也可以通过点号将文件名分割成数组,并取数组的最后一个元素,如下所示:

$ext = end(explode('.', 'image.name.gif'));

根据:在PHP中查找文件扩展名的两种不同方法

还有一种新方法,适合你哈哈:

$ext = explode('.', 'file.name.lol.lolz.jpg');
echo $ext[count($ext) - 1];

0
$size = getimagesize($filename);
$ext = explode('/', $size['mime'])[1];

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接