0

我试图在将文件上传到服务器之前使用 finfo 来确定文件是否是图像文件。我的问题是,下面的代码仅适用于 jpeg,但我也允许使用其他文件类型。所以我有两个问题:

问题一:

如何使用 finfo 检查多种文件类型,例如 gif、tiff、png、ico 等。

问题2:我是否需要使用其他验证方法来检查是否是图像或者我下面得到的是否足够?

下面是代码:

$finfo = finfo_open(FILEINFO_MIME_TYPE);
$mimetype = image_type_to_mime_type(exif_imagetype('/path/to/file.jpg'));

if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/pjpeg")
|| ($_FILES["file"]["type"] == "image/tiff")
|| ($_FILES["file"]["type"] == "image/png")
|| ($_FILES["file"]["type"] == "image/bmp")
|| ($_FILES["file"]["type"] == "image/ico")

{

   if ($finfo !== FALSE){

    move_uploaded_file($_FILES["fileImage"]["tmp_name"],
    "ImageFiles/" . $_FILES["fileImage"]["name"]);
    $result = 1;

   @finfo_close($finfo);
}
}
4

1 回答 1

1

这应该可以检查文件类型是否为图像:

$finfo = finfo_open(FILEINFO_MIME_TYPE);
$mimetype = finfo_file($finfo, '/path/to/file.jpg';
finfo_close($finfo);

if (substr ($mimetype, 0, 5) == 'image') {
    // its an image
}
else {
    // its not an image!
}

第二种选择,如果您使用的是 PHP 5.2 或更低版本:

$mimetype = mime_content_type('/path/to/file.jpg';

if (substr ($mimetype, 0, 5) == 'image') {
    // its an image
}
else {
    // its not an image!
}

至于其他验证方法,你应该使用getimagesize()函数: http: //php.net/manual/en/function.getimagesize.php

if (getimagesize ('/path/to/file.jpg')) {
    // its an image
}
else {
    // its not an image!
}

这样,您的脚本就不会被更改文件的 mime 类型或扩展名所欺骗。

于 2012-05-18T17:20:03.403 回答