我正在使用 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']仅适用于您的第一个解决方案.

现在关于您的解决方案/问题:

  1. pathinfo($sourceFile, PATHINFO_EXTENSION); // 现在应该可以工作了
  2. getimagesize() 返回一个常量,指示第二个索引中的图像类型
  3. 与第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(),以及

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top