我正在使用Uploadify将图像上传到服务器 图像被上传,并放置在Web服务器的临时文件夹中。
现在我需要使用文件beore将它移动到它的真实位置,我有以下代码:
// 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.
我没有使用正则表达式来读取文件名,因为用户可能会将文件命名为任何内容,因此我必须读取文件数据。
任何人都有任何想法?
答案 0 :(得分:2)
您的解决方案#2和#3都已有效。来自the getimagesize() manual page:
返回一个包含7个元素的数组 ...
索引2是指示图像类型的IMAGETYPE_XXX常量之一。
因此,对于.gif,这应该是整数2.要获得文件扩展名,请使用image_type_to_extension()
,因为您已经在使用gd库。例如
$img = getimagesize($sourceFile);
$fileExt = image_type_to_extension($img[2])
答案 1 :(得分:2)
首先,$ sourceFile应该是$_FILES['Filedata']['name']
而不是$_FILES['Filedata']['tmp_name']
,而仅适用于您的第一个解决方案。
现在关于您的解决方案/问题:
pathinfo($sourceFile, PATHINFO_EXTENSION);
//现在应该可以使用getimagesize()
返回一个常量,指示第二个索引中的图像类型请注意,exif_imagetype()
返回与getimagesize()
的第二个索引完全相同的信息,如果您有权访问此功能,它应该会更好地执行。
现在对于图像常数,最常见的三个是:
检查就像做这样的事情一样简单:
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 :(得分:1)
exif_imagetype()可以确定多种图形格式,速度快,甚至不使用GD。
编辑:我发现你已经在使用getimagesize()并且无法翻译常量。上面链接的exif_imagetype()页面包含了对getimagesize()也应该有效的所有返回图像类型的翻译。