无法获取图像文件扩展名
-
19-09-2019 - |
题
我正在使用 Uploadify 将图像上传到服务器。
图像已上传,并放置在 Web 服务器的临时文件夹中。
现在我需要在将文件移动到实际位置之前处理该文件,我有以下代码:
// Get the filepath and filename from server temp dir
$sourceFile = $_FILES[ 'Filedata' ][ 'tmp_name' ]; // e.g. c:\server\path\tmp\php159.tmp
// Solution 1 for getting file extension
$fileExt1 = pathinfo($sourceFile, PATHINFO_EXTENSION); // <-- This only returns .tmp
// Solution 2 with getimagesize
list(,,$extension) = getimagesize($sourceFile);
$fileExt2 = $extension; // this only returns the number 2.
// Solution 3 with getimagesize
$img = getimagesize($sourceFile);
$fileExt3 = $img[2]; // this only returns the number 2.
我没有使用正则表达式来读取文件名,因为用户可以将文件命名为任何名称,所以我必须读取文件数据。
有人有什么建议吗?
解决方案
好吧,首先 $sourceFile 应该是 $_FILES['Filedata']['name']
代替 $_FILES['Filedata']['tmp_name']
但 仅适用于您的第一个解决方案.
现在关于您的解决方案/问题:
pathinfo($sourceFile, PATHINFO_EXTENSION);
// 现在应该可以工作了getimagesize()
返回一个常量,指示第二个索引中的图像类型- 与第2点相同
请记住 exif_imagetype()
返回与第二个索引完全相同的信息 getimagesize()
, ,如果您有权访问此功能,它的性能应该会更好。
现在对于图像常量,最常见的三个是:
- 图像类型_GIF = 1
- IMAGETYPE_JPEG = 2
- 图像类型_PNG = 3
检查就像执行以下操作一样简单:
switch (exif_imagetype($_FILES['Filedata']['tmp_name']))
{
case IMAGETYPE_GIF:
echo 'is a GIF';
break;
case IMAGETYPE_JPEG:
echo 'is a JPEG';
break;
case IMAGETYPE_PNG:
echo 'is a PNG';
break;
case default:
echo 'is something else;
break;
}
还有一件事,最好使用 getimagesize()
/ exif_imagetype()
而不是依赖文件扩展名,因为扩展名可以轻松更改。
其他提示
您的解决方案#2,#3都工作了。从的和getimagesize()手册页:
返回与7个元素的数组。结果 ...点击 索引2是表示图像的种类的IMAGETYPE_XXX常数之一。
因此,对于一个.gif那么这应该是整数2.要获取文件扩展名使用image_type_to_extension()
因为你已经在使用GD库。例如
$img = getimagesize($sourceFile);
$fileExt = image_type_to_extension($img[2])
exif_imagetype()可以确定许多图形格式,是快速和甚至没有用到GD。
编辑:我看你已经在使用和getimagesize(),并有麻烦翻译的常量。上面链接的exif_imagetype()页具有所有返回的图像类型的翻译应该是有效的和getimagesize(),以及